Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как прервать и перезапустить программу?

Лучший ответ:
if bet != 0 or 1 or 2:
Ну конечно дословный перевод с русского на питон будет работать неправильно. Это условие интерпретируется как
if (bet != 0) or (1) or (2):
В питоне целые числа истинны, если они не нулевые. Т.е. получаем
if (bet != 0) or (1 != 0) or (2 != 0):
Как следствие
if (bet != 0) or True or True:
А как известно, X or True всегда даст True, независимо от значения X.
Так что всё условие всегда даст True.
Правильно или так:
if (bet != 0) and (bet != 1) and (bet != 2):
или так
if bet not in (0, 1, 2):

По поводу зацикливания - заверни кусок программы, отвечающий за ввод, в цикл while.

Худший ответ:
if bet != 0 and bet !=1 and bet != 2:

или так
if bet not in (0,1,2):
Вопрос: Почему при импорте функций вылезает ошибка 'is not a function'?

Лучший ответ:
но работать всё равно не будет...
если Вы объявляете функции внутри другой функции, и хотите получить к ним доступ из вне... то предположительно это должна быть либо функция конструктор или класс 
тогда app.js будет вот таким:
let Func = require("./functions.js");
let func_create = new Func();
console.log(func_create.time());

А если отвечать на вопрос почему выходит именно такая ошибка, то интерпретатор ищет у импортированной функции свойство time, оно не задано, то есть undefined, то есть не является функцией

Худший ответ:
но работать всё равно не будет...
если Вы объявляете функции внутри другой функции, и хотите получить к ним доступ из вне... то предположительно это должна быть либо функция конструктор или класс 
тогда app.js будет вот таким:
let Func = require("./functions.js");
let func_create = new Func();
console.log(func_create.time());

А если отвечать на вопрос почему выходит именно такая ошибка, то интерпретатор ищет у импортированной функции свойство time, оно не задано, то есть undefined, то есть не является функцией
Вопрос: Почему видеорегистратор записывает поврежденные видо?

Лучший ответ:
Вставить простенький HDD и не заниматься ерундой

Худший ответ:
Флешка подохнет очень быстро. обычно они используются для выгрузки куска архива...

что за регистратор? ссыль в студию

странно что он пишет AVI, обычно там "кодированный" формат видео

ну и на последок. Пример от регистратора hikvision.  Прежде чем начать запись он размечает диск(форматируешь его когда), делая там тонну "пустых" файлов(на 50% Объема примерно) и потом пишет инфу прямо в них,чтоб не тратилось время на создание файла и выделения места на диске 
Возможно это Ваш случай
Вопрос: Верно ли то что в go нет конкретной структуры проекта?

Лучший ответ:
конкретной структуры проекта нет вообще ни в каком языке.
конкретная структура может быть только при наличии соглашений, например, в конкретном фреймворке или собственном представлении o прекрасном.
да и ту можно (иногда и нужно) менять.

Худший ответ:
Кто как хочет, тот так и делает. Однородность структуры в некотором роде упрощает понимание что где находится.
Скажем, взять структуру проекта на фреймворке Ruby on Rails: любой новый разработчик, знакомый с RoR будет знать что где искать. Конфигурация в одном месте, модели в другом, миграции БД в третьем и т.д.
Вопрос: Как правильно кодировать «неправильный» URL?

Лучший ответ:
import org.springframework.web.util.UriUtils;

class Main {
    public static void main(String[] args) {
        var path = "announce/Театр-Габима-Дело-всей-жизни";
        var pathEncoded = UriUtils.encodePath(path, "UTF-8");
        System.out.println("https://afisha.orbita.co.il" + pathEncoded);
// https://afisha.orbita.co.ilannounce/%D0%A2%D0%B5%D0%B0%D1%82%D1%80-%D0%93%D0%B0%D0%B1%D0%B8%D0%BC%D0%B0-%D0%94%D0%B5%D0%BB%D0%BE-%D0%B2%D1%81%D0%B5%D0%B9-%D0%B6%D0%B8%D0%B7%D0%BD%D0%B8
    }
}

Худший ответ:
это 

https://ru.wikipedia.org/wiki/IDN#%D0%A0%D0%B5%D0%...

https://docs.oracle.com/javase/7/docs/api/java/net...

Provides methods to convert internationalized domain names (IDNs) between a normal Unicode representation and an ASCII Compatible Encoding (ACE) representation


примеры кода
www.java2s.com/example/java-api/java/net/idn/index.html
Вопрос: Почему не видит второй input?

Лучший ответ:
Потому-что input работает не так.
Вопрос: Как он работает?
Ответ: Находите книгу Изучаем Python Марка Лутца (5-е издание, в двух томах)* и читаете. Со временем вы дойдете до раздела в котором будет ответ. Без нормального учебника вы, скорее всего будете и дальше совершать подобные ошибки.
* - Либо любой другой структурированный материал

Худший ответ:
a = input('Значение 1 ')
b = input('Значение 2 ')
print('Значение 1 = '+a+ ' Значение 2 = '+b)
Вопрос: Как был создан ассемблер?

Лучший ответ:
Есть догадки, что была какая-то интегральная схема которая считывала данные из памяти, в виде последовательности ASCII кодов,
Нет. Ты или что-то недочитал или сильно много перечитал. 

Самые первые ЭВМ были стендами с переключателями и лампочками. И чтобы их программировать надо было знать систему команд. То бишь соответсвие положения переключателя со смыслом который она делает. Например 0101 (переключалели вверх-вниз дважды) к примеру несет смысл сложить числа в ячейках 1 и 2 и сохранить результат в ячейке 1. И чтоб не парится сильно - ввели обозначение ADD &1, &x2. Разумеется синтаксис я придумал просто для пример.

Худший ответ:
Ээээ, я не понял, тебя интересует реализация машинных команд на уровне микрокодов процессора?
Вопрос: Как из массива строк получить те, у которых длина равна 5?

Лучший ответ:
Дурацкому вопросу - дурацкий ответ:

`${arr}`.match(/\b\w{5}\b/g) ?? []

// или

arr.reduce((acc, n) => (n.length ^ '0b101' || acc.push(n), acc), [])

// или

arr.filter(n => n[4] && !n[5])

Худший ответ:
По сути у вас почти правильно написано было. Либо воспользуйтесь более лучшим вариантом от otdameskapizm.
let arr = ['katya', 'Karolina', 'Vladislav', 'Anna'];
let num = arr.filter(function(elem) {
    return elem.length === 5;
});
console.log(num);
Вопрос: Как можно улучшить код отображения даты выпуска новости?

Лучший ответ:
Тебе нужен Carbon https://carbon.nesbot.com/docs/#api-localization

Худший ответ:
ИМХО не надо насиловать мозг когда задача решена "не изящно, но практично". Приведенное решение вполне аккуратное и рабочее, из мелких косяков - не учтено что окончания меняются через десяток, что легко поправляется делением с остатком на 10 (%). Будет желание повозиться с более красивым решением - на досуге поколупаете, полезное упражнение...
Вопрос: С какой целью при вызове bot_token телеграма может быть использован метод os.environ.get('BOT_TOKEN')?

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

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

Лучший ответ:
Акцией может являться дополнительный бонус или подарок. Что-то другое. Не сама скидка в %.
Зависит от тематики сайта.

Худший ответ:
Да точно так же -) Рекламу видел "На 53% больше вкуса и свежести!" ))) 86% (в реальности - 95%) людей живут с отключенным мозгом :D Поэтому самое главное - оформить постер о скидках на 26% более красочно, и как минимум на 44% более гармонично, а остальное - это мелочи )))))
Вопрос: Чем можно заменить связку MS Excel + VBA в Linux?

Лучший ответ:
Прекрасный повод пересмотреть парадигму "начинаем работать на компьютере с офиса".
Не искать костылей, которые заменят привычные костыли Excel+VBA, а разрабатывать решения, которые не зависят от желаний левой пятки корпораций и правительств.
Например, Javascript на HTML-странице позволяет не только корректно повторить весь расчет, который народ шаманит в Ёкселе, но и читать-редактировать его без чудовищного геморроя с прыжками по ячейкам и мучительными попытками вспомнить, в которой что считается.
Нужно не только расчитывать данные, но и хранить их? База данных на Линуксе поднимается за 10 минут и не стоит вам ни копейки. Нужно обмениваться данными? JSON и XML не требуют никаких конкретных программ конкретной версии - ваша информация остается доступной, даже если вся M$-продукция объявлена вне закона... 
Нужны документы для печати? PDF - открытый формат, и документ в этом формате не перекосит от того, что вы открываете его не в той программе, в которой создали. Более того - полно библиотек, которые автоматически создадут вам этот документ из ваших данных.
Нужно только сменить парадигму. Для будущего.

Худший ответ:
Попробуйте МойОфис с Lua: https://habr.com/ru/company/ncloudtech/blog/575336/
Вопрос: Умирает постоянно ubuntu 22.04?

Лучший ответ:
начните с проверки качества подключения SSD к материнской плате

Худший ответ:
С диском всё было хорошо? все работало нормально?

тогда в ssd проблема или в плохом подключении диска

что за ноут? насколько новый \ старый? в БИОС есть переключение для диска SATA \ IDE ?
Вопрос: Почему PHP так сравнивает строку и число?

Лучший ответ:
PHP 8.0
If both operands are numeric strings, or one operand is a number and the other one is a numeric string, then the comparison is done numerically. 
Более ранние версии PHP:
If a string is compared to a number or a numeric string then the string was converted to a number before performing the comparison.
То есть, когда вы в 7.4 сравниваете строку с числом, то строка в любом случае приводится к числу. В 8.0, при сравнении нечисловой строки с числом, число будет приведено к строке.
А дальше у вас, похоже, проблема XY. Вам надо искать не "как сравнить через ==", а как решить исходную задачу, для которой нужно такое сравнение.

Худший ответ:
$param = "Любой текст";
var_dump($param == (string)(int)$param && $param !== "0");

А если так попробовать?
Вопрос: Как работает этот код? Почему у функции появляется метод?

Лучший ответ:
const cancelable = fn => { // Создаётся функция cancelable, которая принимает функцию и сохраняет в переменную fn
  const wrapper = (...args) =>{ // Создаётся функция-обёртка, которая принимает любой набор аргументов
    if(fn) return fn(...args) // Если в cancelable была передана функция, то вызывает её с необходимыми аргументами
  }

  wrapper.cancel = () => fn = null // Добавляет свойство во wrapper для очистки переменной fn 

  return wrapper // Возвращает обёртку
}

const fn = par =>{ // Функция, которая оборачивается в декоратор со своим аргументом
  console.log('Function called, par:',par)
}

const f = cancelable(fn) // Создаёт обёртку вокруг fn

f('first') // Function called, par: first
f.cancel() // fn является переменной внутри cancelable, здесь мы её обнуляем
f('second') // Ничего не выводит, потому что условие у wrapper отрабатывает, только если функция есть

Худший ответ:
В JS функции - это тоже объекты.
У объектов вполне могут быть какие-то поля, которые тоже могут быть функциями.
Вопрос: В чем Базовая суть async функций?

Лучший ответ:
Чтобы понять async нужно в принципе понимать мультизадачность.

Есть два вида мультизадачки. Первая базируется на preemptive multitasking. Это классика на потоках (Threads). Подходит для приложений где есть нагрузка на CPU и мало I/O.  Пример таких приложений - рендеринг 3Д графики. Майнинг.

И есть второй вид когда есть много I/O а нагрузка на процессор - малая и ее можно  считать неизменяющейся. Как обработчик событий. Ее делают на async/await. Или еще на мультиплексированном I/O. Она подходит для веб-серверов. Яркий пример - nginx. Или системы обрабоки MQ. Сокет-серверы. Файловые серверы и прочее. 

Поэтому изучать async в отрыве от всех методов организации мультизадачности - безсмысленно. Вы ничего не поймете пока не узнаете все use-cases использования железа и ОС. Чтоб понять async - поймите классику.

UPD: Fixed

Худший ответ:
Прошу
Вопрос: Сохранится ли лицензия Windows, если установить Linux Ubuntu?

Лучший ответ:
Вы можете воспользоваться официальной программой от Microsoft по извлечению ключа активации windows.
Программа называется ShowKey.
https://apps.microsoft.com/store/detail/showkeyplu...

Худший ответ:
1. fingerprint https://consumer.huawei.com/en/community/details/M...
2. лицензия цифровая, пока вы не поменяете ту часть железа которая входит в отпечаток системы у MS - лицензия не должна пропасть и при переустановке (при наличии интернета) само подцепится
Вопрос: Как модифицировать прелоадер на jQuery?

Лучший ответ:
Произвольное количество файлов:
$(function() {
	
	$('#fileupload').change(function(event) {
		
		var html_code = '';
		
		for (var n = 0; n < event.target.files.length; n++) {
			
			html_code += '<img src="'+URL.createObjectURL(event.target.files[n])+'" id="upload-img-'+Number(n+1)+'">';
			
		}
		
		$('.profile-images').html(html_code);
		
		console.log('Выбраны файлы:', event.target.files);
		
	});
	
});

Худший ответ:
с обработчике события change добавьте проверку на число выбранных файлов:if (event.target.files.length !== 3) {
  // как-то сообщить, что ждём именно 3 файла
  return;
}а когда всё ок, то либо сразу в разметке создать вместо 1 целых 3 тега с img, у каждого свой уникальный id.   Либо генерить разметку трёх img на лету и заменять HTML у div.profile-images
Вопрос: Какой X server использовать для headless браузера?

Лучший ответ:
Если нужно граф. окружение, можно рассмотреть OpenBox, т.к. даже lxde тяжелее, не говоря уже о Gnome.

Худший ответ:
Какая видеокарта по сути не важно. 
От gnome он отличается прожорливастью, гном жрет дохрена

Как вариант, незнаю насколько подойдет, можно рассмотреть xfce или lxde
Вопрос: Как сделать относительный импорт без родительского пакета?

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

Если, конечно, не манипулировать механизмом импорта. Он это позволяет, но обычно овчинка выделки не стоит. 
Так что проще закинуть module1 в каталог(пакет) и импортировать его как package1.module1.

А вообще очень странное решение - почему скрипт верхнего уровня в каталоге, а импортируемые модули - нет?

Худший ответ:
Один из способов решения этой проблемы состоит в добавлении директории проекта в sys.path. Это можно сделать в самом начале module2, например так:

import os
import sys

# Добавляем путь к директории проекта в sys.path
project_directory = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
sys.path.append(project_directory)

# Теперь можно импортировать module1
from module1 import *
Вопрос: Что такое compile time?

Лучший ответ:
Compile time - это значит "во время компиляции".
Тоесть в результате в программу должен быть зашит результат.

Что именно хочет составитель задания, и как он себе это представляет - без понятия.

Худший ответ:
Compile time - выбор в коде, во время компиляции (comple time). То есть, компилятор видит код и понимает, какой тип нужен при создании объекта.
var figure = new Circle(); // тип известен заранее (при компиляции)
Console.WriteLine(figure.CalcArea());

В отличие от compile time. может быть run time - во время работы программы, тип объекта выбирается в зависимости от некоторых условий (ввод пользователя, ответ от сервера, настройки в конфиг-файле, изменилась фаза луны). 
Самый простой вариант:
var type = Console.ReadLine();
Figure figure = null;
switch (type.ToLower())
{
    case "square": figure = new Square(10); break;
    case "rectangle": figure = new Rect(10, 20); break;
    case "circle": figure = new Circle(10); break;
}
if (figure != null)
{
    Console.WriteLine(figure.CalcArea());
}
else
{
    Console.WriteLine("Неверный тип фигуры");
}
Выбор делается в рантайме между заранее известными типами -  конкретные возможные типы указаны в коде (в компайлтайме).

Реальный тип (имя класса) можно спросить у пользователя (или из настройки), и вызвать его активатором:
var typeName = Console.ReadLine();
var type = Type.GetType(typeName);
if (type != null)
    var figure = (Figure)Activator.CreateInstance(type);
    Console.WriteLine(figure.CalcArea());
}
else
{
    Console.WriteLine("Неверный тип");
}
Но тип должен быть полным, с пространством имён, то есть, не "Square", а "MyApp.Figures.Square". Таким образом можно создать объект типа, которого вообще не было во время компиляции - например, тип был объявлен в отдельной библиотеке и добавлен в программу после компиляции (так делаются плагины, например). Но для плагинов код будет посложнее.
Вопрос: Можно ли в телеграмме как-то вызвать всплывающее окно с вводом текста?

Лучший ответ:
Нельзя

Худший ответ:
Нельзя, а в чем проблема пользователю всё это писать в чат?
Вопрос: Заслуживает ли проект крестики нолики быть в портфолио?

Лучший ответ:
Если просто крестики-нолики, то нет. Слишком просто, да и в интернете полно примеров. Но если ты сделаешь какие-то необычные крестики-нолики, то вполне.

Например, в обычном поле 3х3, победителя определить очень легко - просто пробежаться по массиву выигрышных позиций и сравнить с текущей. Но уже даже с полем 5х5 это будет сделать уже гораздо сложнее, ведь массив паттернов будет уже больших размеров. Для таких целей нужно будет применять какой-нибудь более сложный алгоритм без такого массива. Это уже хороший вариант

Или дополнительно сделай искуственный интеллект, который будет играть в качестве второго игрока - тоже хорошее решение.

И не обязательно увеличивать размер поля или создавать бота - придумай что-то оригинальное! Например, добавь третьего игрока, чтобы это были не просто крестики-нолики, а... Крестики-нолики-галочки :D

Но на одних классических играх, у тебя мало шансов создать привлекательное портфолио. Создай какое-нибудь сложное приложение на JS (идей в интернете полно), например аналог планировщика задач Jira. Или, еще лучше, придумай что-то своё и реализуй.

Фронтенд - это сложная профессия. Тебе нужно выполнить очень много работы, чтобы стать профессионалом. Если ты думал, что достаточно написать 5-15 проектов, то тебе точно не сюда. Желаю удачи :D

Худший ответ:
Если это про "пять в ряд" и ваш алгоритм играет на уровне чемпиона мира по рэндзю то конечно заслуживает такой проект быть в портфолио.

Если про "три в ряд" на поле "три на три" то разумеется нет.
Вопрос: Как выучить английский для чтения it книг?

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

За месяц, кмк, можно только научиться пользоваться гугл переводчиком и словарями

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

Лучший ответ:
Можно без JS и без плагинов

CSS scroll-behavior
Дока - https://developer.mozilla.org/ru/docs/Web/CSS/scro...
Поддержка браузерами - https://caniuse.com/?search=scroll-behavior

html, body { /* обязательно сразу для html и body */
  scroll-behavior: smooth;
}

Худший ответ:
https://developer.mozilla.org/ru/docs/Web/API/Wind... - параметр behavior
Вопрос: Ликбез по iptv?

Лучший ответ:
все это есть на сайте мегафона. если у них предусмотрен просмотр с ПК(что скорее всего), там должна быть инструкция и плейлист

Худший ответ:
Для начала надо было хоть подключить железку да посмотреть что за трафик там идёт. Может там и не IGMP вовсе
Вопрос: Как сжать файл?

Лучший ответ:
Для exe-шников еще в 90-е создавались не архиваторы а всякие "упаковщики". Из таковых я помню UPX https://upx.github.io/

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

Лучший ответ:
При включении с помощью include так и делают, т.к. для включенного makefile текущим каталогом будет каталог откуда вызван первичный makefile, а отсюда файлы в подкаталоге доступны только с указанием пути. include же по сути просто вставляет текст одного файла в другой и все.
Другой вариант - не использовать include, а запускать make рекурсивно для каждого подкаталога с переходом в этот подкаталог (вроде ключ -с в make).

Худший ответ:
зачем с помощью инклуда в Makefile_a указывать путь к Makefile_aa, и во втором указывать тоже путь к файлам как будто это делаеться из Makefile_a?
затем, что нет никакой магии в подключении одного Makefile в другой, это просто текстовая подстановка, точно такая же, как если ты физически перенесёшь текст второго Makefile в то место первого где написан include.
Вопрос: Как перенести строку при отправке сообщений в тг через js бота?

Лучший ответ:
const message = "Первая строка\nВторая строка\nТретья строка";
bot.sendMessage(chatId, message);
Если хочешь многострочный текст в качестве сообщений.
const message = `
  Многострочный
  текст
  сообщения
`;
bot.sendMessage(chatId, message);

Худший ответ:
Мне просто нужно соединять переменные полученные пользователем, и выводить в чат через бота, но никак не могу сделать на отступ этот, чтобы все было в одном сообщении, но структурировано.
Вопрос: Какой паттерн использовать?

Лучший ответ:
Шаблонный
Шаблонный что?
итератор
А что ты итерировать собрался? 

Не нужно тут придумывать название паттерна и пытаться по нему решить задачу.
Сама задача решается тупо рекурсивным проходом по всем подпапкам.
В зависимости от того, как конкретно ты будешь это реализовывать, будут наблюдаться разные паттерны.

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

Лучший ответ:
На видеокарту в таком случае можно не смотреть. Из представленных вами очень хорошим выглядит Acer Aspire 3, процессор отличный, хоть и будет считаться уже стареньким, но по мощности отлично, ОЗУ в целом будет достаточно первое время. Минус в экране, будет темноват. 

Если у вас есть время и возможность набрать большую сумму денег, то лучше поступить так и в будущем взять Ноутбук из среднего ценового диапазона.

Худший ответ:
однозначно не нужно. для фронта (при изучении можно использовать калькулятор), по мере продвижения должны появится деньги и соотношение время/деньги/комфорт
представленные буки - хлам. Лучше взять б/у. Можно конечно что-то делать, но будет явный дискомфорт.
Вопрос: Почему не корректно работает библиотека schedule на удаленном сервере beget?

Лучший ответ:
Зайди на сервер, в терминал отправь команду date покажет время на сервере, если время отличается от твоего то нужно поменять часовой пояс.
Отправь команду timedatectl set-timezone Etc/GMT+8 вместо +8 поставишь свой часовой пояс.
Или отправь так timedeltactl set-timezone Europe/Samara
Список доступных часовых поясов можно посмотреть этой окмандой timedatectl list-timezones

Худший ответ:
Какая команда в телеграм api выполняет в точности то же самое как если человек нажал в меню группы «Покинуть группу»?
Вопрос: Когда стоит использовать MikroTik/Cisco?

Лучший ответ:
Такое оборудование ставится потому что оно надежное,долговечно,закрывает обычно 99% всех потребностей. Один раз настроил и забыл, лет на 5.

Всякие домашние роутеры типа асуса,тплинка итд не живут от слова совсем, под нагрузкой больше чем 3х комнатная квартира. некоторые кинетики живут, но у них нехватает фишек микротика, а стоят они не намного дешевле. Вот даже взять Ваш домашний роутер - для меня дикость, что роутер не умеет проброс портов. Потому что это доступно даже в dir300(длинк)  12летней давности))

Оборудование cisco на порядок дороже микротика. Микротик не считает элитным оборудованием. По идее это самый низ адекватного оборудования для малых - средних предприятий.

Ставьте микротик. Он умеет всё что понадобится в школе. И при этом будет работать без проблем.
На этажи по POE свитчу +  вифи точки. 
И весь вифи можно будет объединить в capsman(бесшовный) с нужной авторизацией

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