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

Лучший ответ:
Просто права на папки редактируете так как нужно.

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

Лучший ответ:
В компоненте с полем поиска в событии mount навесить нативный js'овский event listener прямо на document. В beforeDestroy не забыть отцепить.
Тогда если на станице есть соответствующий компонент - всё будет работать. Если нет - не будет ошибок.

Худший ответ:
В компоненте с полем поиска в событии mount навесить нативный js'овский event listener прямо на document. В beforeDestroy не забыть отцепить.
Тогда если на станице есть соответствующий компонент - всё будет работать. Если нет - не будет ошибок.
Вопрос: Как правильно подгружать ресурсы в Spring?

Лучший ответ:
Еще простое решение - 
Создайте файл ApplicationProperties
@Configuration
@ConfigurationProperties(prefix = "application")
public class AppProperties {

    @Getter
    @Setter
    private String baseUrl;

   
    @Getter
    @Setter
    private String uploadPath;

}

Добавьте нужные конфиги:
application.base_url=http://localhost:7777
application.upload_path=/home/admin/application.com/uploads
Обратите внимание на названия параметров.
Сперва в конфиге указываем префикс application (вы можете указать свой префикс).
Далее base_url => baseUrl   upload_path => uploadPath

Далее в MyApplication (в точку входа приложения) добавьте аннотацию:

@EnableConfigurationProperties({
        ApplicationProperties.class
})
public class MyApplication {
}

Теперь в любом компоненте Spring вы можете аутовайрить этот класс и при помощи геттеров получать нужные параметры.
Вот, .пример:

@Controller
@RequiredArgsConstructor
public class MyController {

private final ApplicationProperties properties;

// ... тут методы контроллера
String uploadPath = properties.getUploadPath();
//...

}
Источник - https://www.baeldung.com/properties-with-spring

Худший ответ:
Со Spring Boot можно проще:
аннотация @Value
@SpringBootApplication
class MySpringBootApplication {
@Value("${myVar}") private String myVar;
...
} 
сама подцепит при старте приложения нужный параметр из файла конфигурации либо переменных среды окружения. Это принятый в индустрии подход для загрузки конфигурации при старте.
Но конечно, можно написать и ручную загрузку)
Вопрос: Какие есть проверенные хостинги в Нидерландах для хранения видео?

Лучший ответ:
На русском что ли искали? :) Ну блин... искать на русском инфу про голландский хостинг для размещения порно :) Искать надо на английском ну или там где русских не любят - там такой инфой с удовольствием поделятся :)

Худший ответ:
ну про leaseweb странно что не нашел
есть и подешевле  - поустойчивее
Вопрос: Как передать json файл с локальной сети на глобальную?

Лучший ответ:
собираешь LFS
потом берёшь cron или лепишь systemd сервис+таймер для отправки по времени, и забиваешь команду:
curl --data-binary @<file path> <URL>
например:
curl --data-binary '@ikillyou.json' 'https://pentagontours.osd.mil'
и вуаля

Худший ответ:
Можно.
Вопрос: Как отменить первый revert?

Лучший ответ:
Используйте git reflog для восстановления состояния.

Худший ответ:
revert в отличие от reset не удаляет коммит, а добавляет новый коммит, который отменяет указанный. 
https://githowto.com/ru/undoing_committed_changes
Поэтому у вас есть 2 варианта: 
Отменить отменяющий комит с помощью revert
Удалить последний коммит с помощью reset 
evtuhovich.ru/blog/2009/04/03/git-reset
Вопрос: Как выйти из консоли в centos 7, если он только что установился на VirtualBox?

Лучший ответ:
Ну так вы его, похоже, без GUI установили, потому там, кроме терминала ничего нет. :))

Худший ответ:
Нажмите на клавиатуре RCtrl (правый Ctrl)
Вопрос: Не работает keepalive_timeout 360, соединение закрывается через 60 секунд. Как сделать, чтобы держал 360 секунд?

Лучший ответ:
504 (Gateway Time-out)
у вас бекенд отваливается по тайм-ауту. пропишите соответствующие параметры proxy_read_timeout/proxy_send_timeout

Худший ответ:
Какой параметр использовать зависит от того, что именно отдает nginx. Думаю, это наведет вас на правильную мысль
Вопрос: Зачем нужны функциональные интерфейсы в java?

Лучший ответ:
Функциональный интерфейс - это не что-то техническое, что реализуется в языке или виртуальной машине. Это просто абстракция, которая была в Java всегда.

Java задумывалась как исключительно объектно ориентированный язык, поэтому функций в ней никогда не было и нет. Всё поведение располагается в методах. Но для обработчиков событий, например, нужно только поведение, но не состояние, поэтому объект "оборачивающий" метод бесполезен. Обычно обработчик выглядел так:
someButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        someTextField.setText("Кнопка нажата");
    }
});
ActionListener имеет функциональный интерфейс. То есть интерфейс с одним методом, как бы заявляющий "я не класс, я функция".

В Java 8 просто появились способы более удобно работать с функциональными интерфейсами - в языке появились лямбды, у виртуальной машины появились средства, позволяющие генерировать из лямбд классы с функциональным интерфейсом, а в стандартной библиотеке появился пакет java.util.function, содержащий набор универсальных функциональных интерфейсов, позволяющих передавать и возвращать лямбды между методами в коде разных разработчиков.

Худший ответ:
Для лямбд - это правильный ответ. 
Создатели джавы не осилили(постеснялись/посчитали ненужным/etc) сделать отдельный кусок синтаксиса для нормального описания функциональных типов, вместо этого сделали так, что интерфейс можно смаппить в лямбду, если у него(интерфейса) ровно один абстрактный метод. Собственно, все эти BiFunction, Predicate, ToLongBiFunction и прочие вырвиглазности  - это костыли, чтобы ты мог лямбды передавать куда-то. Их, конечно, не хватит, и придется объявлять свои костыли с подходящей сигнатурой.
Всё это обвесили аннотацией @FunctionalInterface, чтобы компилятор мог ругаться, что ты делаешь ошибки при объявлении функционального интерфейса. Правда, здорово?(нет).
Вопрос: Периодически не срабатывает setTimeout — в чём может быть проблема?

Лучший ответ:
setTimeout то скорей всего работает, а вот то, что происходит внутри функции, скорей всего не всегда работает как ожидается. Простой console.log внутри setTimeout покажет, что она работает.

Никаких приоритетов у него нет

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

(() => {
    [ 'clearInterval', 'clearTimeout' ].forEach(method_name => {
        const original_method = window[ method_name ];
        window[ method_name ] = function() {
            console.log(`method ${ method_name } is called with arguments:`, arguments)
            return original_method.apply(this, arguments)
        }
    })
})()
Вопрос: Как быстро снова окунуться в свой же код?

Лучший ответ:
"Я через месяц отпуска" — то же, что "другой, новый разработчик в проекте".
Смотрю на свой код, как будто его завтра будет допиливать другой разраб, пока я вне зоны доступа.
Стараюсь придерживаться общепринятых паттернов, комментировать моменты, требующие пояснения. Коммитить раз в день или чаще по завершенным микрозадачам, с разумными комментами коммитов.

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

Лучший ответ:
1) Прописывать dns на оба адреса, обращение всегда будет по доступным адресам, т.е. если работает только канал 1 - доступ будет через него, если работает только канал 2 - доступ через него.
2) Проксировать через cloudflare или свой VPS, годится только для сайтов.
3) (лучший вариант) Купить ASN, пул своих адресов и подключаться к провайдерам по BGP

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

AS-ка берется в аренду у крупняка, Ваш провайдер, если достаточно толст (любой из них) запросто и аренду даст и настроить поможет. Но, в зависимости от модели микротика и от Вашего решения по fullview - возможно придется менять микротик на более производительную модель.

Купить ASку можно, но посложнее будет.
Вопрос: Создал Telegram bot, но он не работает; выскакивает ошибка, что делать?

Лучший ответ:
Создавал бота для telegram всё было хорошо. Только не надо рассказывать сказки. Вы не создавали бота, вы скопировали его из интернета, и то с ошибками. Да и еще ошибку дали от другого кода.
Чтобы заработало, нужно в одной директории с файлом бота создать файл "config.py". В нем написать строчку:
TOKEN = 'тут_ваш_токен'
Далее: 'import configure' заменить на 'import config'
И - bot = telebot.TeleBot(configure.config.TOKEN) заменить на bot = telebot.TeleBot(config.TOKEN)

И вообще нужно банить всех, кто лезет в боты, но не знает основ!!!

Худший ответ:
Замени configure.config.TOKEN  на строку:  "тут твой токен 1234566"
Вопрос: Как реализовать функции многоканального номера на своих мощностях АТС?

Лучший ответ:
Вам не обязательно подключать и оплачивать виртуальную АТС оператора, вам нужно, чтобы он предоставил вам подключение через sip trunk.

Худший ответ:
Нет
На собственном оборудовании многоканальный номер можно сделать только через транки
При обычной абонентской системе при поступлении звонка на АТС по диалплану выбирается подходящий свободный абонент и на него маршрутизируется вызов, т.е. происходит обычное перенаправление:
клиент звонит на номер 777, атс его перенаправляет на номер 771, если 771 занят, то на 772, если 772 занят то 773 и тд
К Вам же приходят уже просто линии 771, 772 - 77х
Многоканальность может быть доступна посредством SIP или E1 транков - они гонят все пакеты выбранных номеров в вашу сторону, а вы уже у себя их расшифровываете и маршрутизируете на нужных абонентов
Вопрос: Счётчик людей в дверном проёме на вход и выход, как реализовать через Arduino?

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

1. Скажите, что это турикет с шириной на 1 человека, имеющий 2 разнесённых фотодатчика. Так легко сосчитать и куда шёл человек и сколько их прошло.
2. Используйте ПК с камерами и ИИ, а на дуринку возложите контроль (watchdog для ПК) и отображение результатов.


Худший ответ:
Блин, да ну просто же все. Организуете цикл, при пересечении двух датчиков, фиксируете либо вход, либо выход. В зависимости от того, какой датчик сработал первым.
В качестве датчиков можно использовать: пару ик-излучатель / приемник, как вы сами написали, пару лазер / фотодиод. Или ультразвуковой дальномер.
Вопрос: Почему время в PHP идёт неправильно?

Лучший ответ:
Минуты это i, а не m. m - это месяц. Вам выводится текущий час и текущий месяц.

Худший ответ:
Попробуйте в начало кода пихнуть, мне всегда помогает:
date_default_timezone_set('Europe/Moscow');
Вопрос: Будет ли считаться расизмом добавление настроек в игру, которые позволяют отключать персонажей некоторой расы?

Лучший ответ:
Самая большая ошибка при борьбе - вести ее по правилам твоего противника.
Феминистки, борцы за права цветных, геев, трансов и остальные либералы и не только(!!!) не имеют конкретного свода правил. Эти люди могут кардинально менять свои убеждения в течении нескольких дней. Им просто невозможно угодить. Я устал приводить в пример EA. Помните что было с трейлером в котором была однорукая женщина? Засрали его, вот что. И участие в этом принимали сами либералы.
Поэтому подстраиваться под их правила нельзя! Хотите делать возможность оставить только баунти на карте - пожалуйста! В конце-концов, не вы же выставили правило - только белые, а администрация сервера.

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

Лучший ответ:
Как форумы видят айпи пользователя?Никак не видят, у них глаз нет.
Пользователь сам сообщает свой IP адрес.Если я прямо будучи залогиненным, поменяю айпи, то на форуме это высветится?Ну вы это спросите у разработчиков которые этот сервис писали, кроме них никто не знает что там должно высветиться и когда.

Худший ответ:
вот так$_SERVER['REMOTE_ADDR'];
Вопрос: Откуда неадекватный размер ext4.vhdx?

Лучший ответ:
Разобрался. Пишу тут для тех, кто столкнется с той же проблемой. 

Решение для очистки в Docker Desktop. 
1. Устанавливаем libguestfs-tools в wsl.
2. sudo mkdir -p /mnt/wsl
3. sudo guestmount -o allow_other --add mnt/c/Users/username/путь_к_/ext4.vhdx -i /mnt/wsl
4. Чистим лишнее в /mnt/wsl
5. После этого из винды уже запустить
wsl --shutdown
optimize-vhd -Path путь_к_\ext4.vhdx -Mode full

Худший ответ:
Есть еще один способ уменьшить размер этого файла.
1. зайти в Docker Desktop 
2. нажать на Troubleshoot (сверху справа жучок такой)
3. Там выбрать Clean / Purge data
4. и среди вариантов выбрать WSL 2

У меня после этого действия ext4.vhdx  уменьшился с 34 гигов до 1,1 гб.

До этого я, правда, снесла все контейнеры и образы, какие там были, т.к. надеялась, что это даст результат, но память как была занята этим файлом, так и оставалась.
Вопрос: Самый эффективный метод борьбы с читерами в онлайн шутерах?

Лучший ответ:
О советчиков набежало. Сейчас свои пять копеек вставлю.
Короче всё правильно выше написали и ниже, наверно еще напишут. Вообще борьба с читерами - это задача, которую до конца решить не возможно. Это всегда trade-off, война брони и пули.
Есть базовые принципы, но обязательных среди них нет:

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

Но есть ряд важных и неочевидных мер:

следить за коммюнити в форумах, чатах и местах их обитания, люди неизбежно делятся читами и хаками, надо просто думать как читеры;
не показывать и не разглашать четких границ, ограничений и условий чит-детекторов.

Второй пункт очень важен. Как только будет четко и понятно почему и при каких условиях банится читер, читер быстро научится не доводить до бана, но пользоваться читом. Нужно, чтобы кара, как ни парадоксально, была не стопроцентной. Важно сделать игру с читами неудобной и читами пользоваться не будут.
Важно не банить читера сразу, как только выявили, что он читер, а отложить бан на рандомный срок, чтобы ему не понятно было на чем именно он попался. Чем дольше срок, тем менее понятно, но больше успеет навредить игрок.
Делайте скрытый флаг "читер" и читерам предоставляйте немножечко незаметненько другую игру. Другие ограничения, другие правила, которые его ущемляют незаметно, выводят на справедливый уровень, но доказать при этом ничего не получится. Будет нытьё на форумах, но оно будет от читеров, а читеры должны страдать. Можно даже пустить слух, что использование читов ведёт к странным глюкам в балансе игры=) Такой слух часто работает даже без античит-защиты.

Резюме. Самая надёжная античит-защита -- это непонятная и недетерминированная защита.

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

Нужно изначально построить модель читера и крутого игрока (не читера) для вашей игры.
Затем, определить границы читер/не-читер, но не из головы, а на основе процентных отношений времени продолжительности событий в игровых тиках (НЕ микросекундах!!!), времени обмена сетевыми пакетами.

Важно, сделать всё правильно, чтобы игроки с хорошей реакцией, быстрым ПК, быстрым сетевым соединением не стали читерами.

Расчёты ведутся как на клиенте, так и на сервере, притом, в зоне прямого поражения, в расчётах могут участвовать ПК соперников (как доп.классификатор).
Вопрос: Как сделать перенаправление на определенную страницу через hosts?

Лучший ответ:
Как сделать перенаправление на определенную страницу через hosts?Никак.
hosts это аналог DNS на компьютере.
Сообщает IP адрес указанного доменного имени.
При чем тут страницы?

Худший ответ:
Никак это не сделать без бампинга https да и с бампингом будет не так просто. Тут недавно было обсуждение - чел хотел при заходе на гугло перенаправлять на бинг.
Еслиф че - SSL-сертификаты были придуманы специально чтобы противодействовать таким вот перенаправлениям.
Вопрос: Почему не устанавливается .msi пакет (установка программ) через групповую политику?

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

Конфигурация компьютера \ Политики \ Административные шаблоны \ Система \ Групповая политика \ Указать время ожидания при обработке политики загрузки = (30 сек)

Худший ответ:
Почему не устанавливается .msi пакетНаписано в журнале "Установка" и вашего пакета.
Вопрос: Как организовать просмотр тысяч фотографий, например, как АйФото или Гугл-фото?

Лучший ответ:
Согласен задача просто анриал - уровень гугла/яндекса. А если серьезно, просто выводим первые 30-50 фоток дальше просто по скролу догружаем еще через ajax  + lazу load  и все

Худший ответ:
Lazy Loading или в переводе - пасивная загрузка. Никто не может просмотреть всю тысячу фотографии сразу поэтому иммет смысл их загружать постепенно, по несколько.
Вопрос: Посоветуйтe толковые курсы по UX/UI дизайну?

Лучший ответ:
Coursera — выбирайте по уровню. DesignSpotSchoolNielson Norman Group — читайте артикли, большое количество информации.

Худший ответ:
в интернете полно таких и бесплатно есть
Вопрос: Как победить Node Sass does not yet support your current environment: Linux 64-bit with Unsupported runtime (64)?

Лучший ответ:
Мне помогла пересборка модуля:
npm rebuild node-sass

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

Лучший ответ:
Потерять можно все при любом действии и любым продуктом.
Терраформ просто позволяет сделать это .. красиво и очень удобно, если вы хреново его спланировали.
Правило 1:  используйте автоприменение только в тех местах где не жалко или где вы железобетонно уверены(и берете риски на себя)
Правило 2: валидируйте план. Хотя бы глазами
Вообще, есть у некоторых людей практика делать план в файл, валидировать его какой то внешней логикой, и при успешной валидации применять  план из файла, не просчитывая его заново (он делается при каждом апплае) с автоподтверждением. Мне не нравится, да и терраформ честно предупреждает что на момент реального применения ситуация может отличаться и менять придется совсем другие элементы.
Правило 3: разноси элементы по логическим слоям, чтобы уменьшить зону поражения при гибельном апплае. Например настройки сети а одной папке со своим стейтом, запуск приложения - в другой. И связывайте через ремоут стейт. Главное соблюдать меру, чтобы каждую, скажем , security group в aws не создавать в отдельных слоях.
Правило 4: используйте модули, если применение логической группы ресурсов используется более одного раза. Тут тоже не стоит плодить модули на каждый ресурс и подходить разумно.
Правило 5: тестируйте изменения! (Используя одни и те же модули для стейжа и прода). Логично предположить что если вы снесли стейж то и прод снесется.
Правило 6: используйте vcs для работы с кодом терраформ (для того чтобы откатывать код для восстановления убитого стейжа например)
Правило 7: используйте lifecycle политики Prevent destroy на ресурсах, чтобы запрещать из убиение
Помидор 7.1: используйте ignore changes там где это нужно
Правило 8: используйте правильный инструмент для того что вы хотите сделать. Терраформ умеет много чего, но конфигурейшн менеджер он не заменит, хотя по функциям они чуть да пересекаются.
 В принципе, если продолжать я могу до штук 20 дойти полезных советов, но на 90% мои правила, по сути - используйте для работы с кодом терраформ те же правила что и для работы с любым другим кодом - снимете 70% проблем. Остальные будут связаны с особенностью работы терраформ и радиусом кривизны рук автора терраформ кода.
P.S. пишу на ходу в метро, орфографию и пунктуацию правит т9. Спрашивайте, вдруг заметите какой нибудь термин, который я писать не собирался :D

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

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

А ещё дядя в погонах может вас просто попросить сказать пароль. Неужели вы ему откажете и станете мешать следствию?

P.S. Как вариант, TrueCrypt.

Худший ответ:
Какова модель нарушителя? От кого шифруемся? Если это "люди в сером" - это делать бесполезно, потому что терморектальный криптоанализ вскрывает любые пароли.
Вопрос: В чем разница @media и @viewport?

Лучший ответ:
Привет! Спасибо за вопрос! 
Их обоих объединяет то, что они называются at-rules https://developer.mozilla.org/en-US/docs/Web/CSS/A...@media это объявление тела медиа-запроса@viewportэто правило задающее вьюпорт вместо html viewport (на стадии draft)
Вместо css вьюпорта, используйте тот что в html, в css это свойство находится ещё на стадии разработкиКогда-то давным-давным давно, в далёкой-далёкой галактике...
Разрешение экранов айфона стало громадным, и плотность пикселей тоже
Компания apple придумала в мета атрибуте name значение viewport <meta name="viewport">
Чтобы научить браузеры рендерить веб-страницы состоящих из обычных пикселей в "СSS-пиксели"
Но, как вы можете понимать, оно относится к HTML а не к CSS
И W3C не нужно чтобы сущности, связанные с UI плодились в HTML
Поэтому W3C создал правило @viewport но, уже для CSS:@media screen and (min-width: 640px) and (max-width: 1024px) {
   @viewport { width: 640px; }
   ...
}
Разница между viewport-HTML и @viewport-CSS лишь в том, что его параметры вы задаёте уже в CSS, а не в HTML@viewport заставляет по другому рендерить страницу, чтобы текст выглядел более сглажено и читабельно, в то время как @media запросы это просто ключи для построения уникальных css правил под разную высоту и ширину экрановВ завершении, @viewportдолжен будет покончить раз и навсегда с ненужными в HTML вкраплениями от UI, бороться за восстановление свободы HTML в галактике, который предназначен только для структуры а не внешнего вида….
Да пребудет с тобой Сила

Худший ответ:
Разница? Во всем. Viewport нужен, чтобы открываемый сайт правильно подстраивался под размер девайса, а media, чтобы прописать стили для разных размеров отображения страницы. Чувствуете разницу? Установка условно говоря "разрешения" просмотра страницы и стили для отображения страницы при определенном "разрешении" просмотра
Вопрос: Как досконально понять работу Интернета ?Есть ли книга о технологии Интернет, написанная простым языком?

Лучший ответ:
Таненбаум - Компьютерные сети

Худший ответ:
Я как-то купил "Руководство администратора Linux" Эви Немет, Гарт Снайдер и др.
Отличная книга! Сейчас уже вроде чуть более свежие издания есть, у меня в красной обложке.

Там не только по линуксам, скриптам, и прочем, а ещё по компьютерным сетям, сетевым службам и про устройство интернета в целом. И всё такое связанное. Она даст правильную последовательность (хотя можно читать и отдельные главы, а не всё подряд, я так и делал) и разложит "по полочкам" имеющиеся знания в голове и дополнит их.
Единственное, что для понимания именно интернета и глобальных сетей там нет (хотя.... может и есть, но я это пропустил), так это BGP, но его за неделю можно изучить вполне хорошо самостоятельно, курсы в интернете есть.
Ну и по сетям, "Основы сетевых технологий CISCO", и другие курсы для подготовки к CCNA, CCNP, и др.