Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Какое сетевое оборудование закупить для построения WLAN в небольшом офисе?

Лучший ответ:
Или всё от Микротик. 
Или - роутер микротик, вифи точки убиктюньти

Худший ответ:
Все найдете здесь, и настенные точки с питанием с сквозным РОЕ для декттелефонов и компов. И потолочные, контролеры и комутаторы с экранами и шлюзы. Дешевле чем юбики раза в 1.5, на столько же и мощнее. Управление также через мобилу. Вам оно надо разносорт разводить 
https://www.tp-link.com/kz/omada-sdn/
Я ставил ультру и 5 спидстеров, сейчас вот на омаду перешел. Покупайте сразу надолго
Вопрос: Не работает бот созданный на python. Он не отправляет сообщения. Как можно решить данную проблему?

Лучший ответ:
Как можно решить данную проблему?
Произвести дебаг, конечно же.

Худший ответ:
попробуйте добавить в конец кода bot.polling(none_stop=True, interval=0)
Вопрос: Как разместить элементы для мобилки?

Лучший ответ:
Картинка это псевдоэлемент. 
Он может быть на десктопах вынут из потока и размещен справа абсолютом. 

Либо всё это может быть гридом, который перестраивается как нужно. 

Дублировать контент тут точно не нужно.

Худший ответ:
Ну, при такой раскладке мало что можно сделать. Например, можно дублировать кнопки - https://codepen.io/aliencash/pen/vYWawZK
Но лучше перейти на grid или flex с flex-wrap, чтобы можно было использовать order.
Вопрос: Целесообразно ли хранить изображения как BLOB в БД?

Лучший ответ:
Несколько тысяч - можно и в БД
Вот что пишут про хранение небольших бинарников в базе SQLITE

SQLite читает и записывает небольшие BLOB-объекты (например, эскизы изображений) на 35 % быстрее¹, чем те же BLOB-объекты, которые можно читать или записывать в отдельные файлы на диске с помощью функций fread() или fwrite().

Кроме того, одна база данных SQLite, содержащая 10-килобайтные BLOB-объекты, использует примерно на 20 % меньше места на диске, чем хранение BLOB-объектов в отдельных файлах.

Разница в производительности возникает (мы полагаем), потому что при работе с базой данных SQLite системные вызовы open() и close() вызываются только один раз, тогда как open() и close() вызываются один раз для каждого BLOB-объекта при использовании BLOB-объектов, хранящихся в отдельные файлы. Похоже, что накладные расходы на вызовы open() и close() больше, чем накладные расходы на использование базы данных. Уменьшение размера связано с тем, что отдельные файлы дополняются до следующего кратного размера блока файловой системы, в то время как большие двоичные объекты более плотно упаковываются в базу данных SQLite.
https://www.sqlite.org/fasterthanfs.html

Худший ответ:
Ну то есть логика этого вопроса в том, что по какой-то причине файл с БД забэкапить затруднительно, а вот картинки, которые лежат в этом файле - наоборот
Так же и "стороннее средство" в виде команды copy ну вообще ни с чем несовместимо, а создание/разворачивание "дампа" специфическими для БД средствыми доступно на каждом углу.
Не говоря уже про доступ к этим картинкам сторонними средствами. 

Все-таки анекдот про Вовочку, "Где логика, где разум?" должен быть девизом этого сайта.
Вопрос: Можно создать такого Телеграм-бота?

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

Но перед разработкой прежде нужно понимать как работают под капотом Telegram-боты. Все они построены и управляются по API, но для вас сделали удобную оболочку в виде библиотек/фреймворков, которыми просто управлять.  Поэтому если вы создадите бота, и просто отправите ему текст - он, естественно, ничего вам и не ответит, потому что нужно как-то обработать этот запрос.

Итого: 

1 шаг - познакомиться с библиотекой pyTelegramBotAPI
Это очень простая библиотека, в гугле очень много информации на эту тему (если вам нужен 1-2 проекта, то можете остановиться на ней, но если рассматриваете дальнейшую разработку ботов или ожидаете максимальную производительность - лучше сразу изучить aiogram) 

2 шаг - познакомиться с базой данных
Сделать можно 2 вариантами: 
2.1 Базой данных может выступать сам Телеграм, например заявка будет отправляться в группу, и оттуда уже можно извлекать этот текст, ничего сложного и лишнего не надо будет подключать (за исключением разобраться, как нумеровать заявки)

2.2 Подключить реальную базу данных
Да это будет чуть-чуть сложнее, для начала можно и sqlite3. Просто ознакомьтесь с CRUD-операциями, этого будет достаточно с головой.
Чтоб было проще - воспользуйтесь программой SQLiteStudio.
На будущее рассмотрите полноценные базы данных mysql/postgresql или nosql, так как sqlite имеет свои недостатки.

3 шаг - приобретите свой сервер
Чтобы запускать ботов - есть 2 варианта: polling, и вебхуки. 2 вариант надёжнее и сложнее, но 1 будет отличным стартом. Плюс 1 вариант даст вам удобство в разработке и запуске скрипта всего 1 командой bot.polling(). 
4 шаг - позаботьтесь на сервере о бесперебойной работе скрипта
Если вы будете запускать на linux, вам нужно будет написать systemd-файл (к примеру bot.service)  который будет поднимать ваш скрипт, если произошла какая-то ошибка в коде.
На этом все)

P.S Но так как я имею уже достаточно большой опыт в разработке, я бы строил с использованием таких технологий:
aiogram + FastAPI + uvicorn + mysql.
Удачи в разработке!

Худший ответ:
Так это чат-бот стандартный. Таких миллионы, соответственно можно!

Следует понимать, что надо изучать БД sqlite3 обязательно! 

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

Лучший ответ:
В день приходится по несколько раз менять
Тоесть они изначально не заблокированы, но после того как начинаете пользоваться - они блокируются?
Их блокируют, случайно, не из-за того что ты на этих vps делаешь ?)

Обычно это решается поднятием VPN на том ip, который заведомо не заблокирован, и в той локации, где нет блокировки нужного ip.

Худший ответ:
Попробуйте использовать не OpenVPN, а shadowsocks.
Либо изучите - как прятать траффик VPN под https.
Вопрос: Как получить самую давнюю дату, хранящуюся в массиве?

Лучший ответ:
arr.map(n => n.date).sort()[0]

// или

arr.map(n => n.date).reduce((min, n) => min < n ? min : n)

// или

new Date(Math.min(...arr.map(n => new Date(n.date)))).toISOString()

Худший ответ:
new Date( // чтобы конечный результат был в виде человеко читаемой строки
 Math.min.apply(  // применим функцию поиска минимального элемента в массиве с помощью apply
   null, // контекст не нужен
   arr.map(i => new Date(i.date)) // в качестве массива, среди которого ищем минимум - массив дат, преобразованных в Date
  )
).toISOString() // собственно, преобразовываем в человеко понятную строку.

Ну или нагляднее:
const dates = arr.map(i => new Date(i.date))
const minDate = Math.min.apply(null, dates)
const minDateString = new Date(minDate).toISOString()
Вопрос: Как подключить USB к планшету без OTG?

Лучший ответ:
Можете воспользоваться bluetooth, раз уж так прижало.

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

Лучший ответ:
Что за вопрос?)
Понятное дело что скорость канала от потребителей проксей до тебя является важной.

На каждый порт при полной одновременной загрузке ты сможешь подать 100 / 50 = 2 мбит если установишь на 100 мбит и 500 / 50 = 10 мбит если установишь на 500 мбит.

Коннект к проксям может идти как по статическому адресу (если провайдер может такой дать), так и по домену (можно свой сделать домен и скриптом менять A запись при смене IP адреса, так и можно через DDNS это реализовать). Но конечно же лучше статический ipшник иметь. 

Скорость самих проксей как симки в порте не зависит от кабеля. 

Она зависит от преград на пути до базовой станции мобильного оператора и загруженности базовой станции. Как показывает практика с 7-9 утра и до полуночи базовые станции испытывают некоторые трудности с нагрузкой. Соответственно в это время скорость прокси будет падать. 

Также скорость зависит от современности оборудования на базовой станции и типа подключения к сети оператора: это может быть либо оптика, либо радиоканал. Часто именно базовые станции, которые соединены с сетью оператора по радиоканалу работают медленнее.

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

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

Лучший ответ:
Примерно так:
<T> void genericMethod(T argument) {
        // argument extends object
        System.out.println(argument);
    }
т.к. не понтяно какой тип будет у аргумента, он будет обладать только свойствами Object

<T extends SomeType> void someMethod(T argument) {
        System.out.println(argument);
    }

    abstract class SomeType implements SomeInterface {
    }

    interface SomeInterface {
        //TODO :: some methods
    }
Можно указать, что аргумент наследуют к.л. тип и тогдаможно вызывать методы этого типа.

Худший ответ:
В полной мере union-типы реализованы в Scala. Поэтому тебе надо сменить язык чтобы работать
на таком уровне выразительности своей идеи.

Например вот функция которая конвертит дату-время для строки или для лонг-типа.
def convertTime(time : String | Long) : String = 
  ....

В Java есть вариант - передать базовый типп Object и в теле функции проверять instanceOf и делать
соотв. conditions или паттерн матчинг по типу. 
String convert(Object object) {
   ......
}
Вобщем все варианты требуют явного перечисления логики которую ты хочешь сделать. 

Или ты хотел как-то "схитрить" и не писать логику?
Вопрос: Быстро ли мое решение?

Лучший ответ:
Измерение перформанса - это великое искусство. В данном конкретном приложении скорее всего узким местом будет не игры с массивами а конкретно печать на экране
printf("%d\n", c[i][0]);
поэтому из быстрых алгоритмов печать надо вышвырнуть. Или заменить ее на агрегацию результата или 
думать об асинхронных и параллельных операциях записи результата в файл если уж он так сильно нужен.

Очень многие начинающие прокалываются на этом. Еще попробуй отказаться от индекса в массиве и заменить
его на "подвижный" указатель по массиву. Часто бывает что умные компилляторы умеют распознавать такой шаблон но я-бы предложил написать две реализации и сравнить.

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

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

Ваш текущий вариант вносит дополнительное разименовывание указателя на каждое число.
Вариант с memcpy внесет дополнительное копирование, что помедленнее разыменовывания указателя по идее.

Но на практике все зависит от кучи факторов. Много ли у вас чисел, попадают ли они в кеш процессора, как далеко лежат две части буффера, как долго идет обработка каждого числа. Проверить это в итоге можно только практикой, но, скорее всего, ваше текущее решение будет быстрее memcpy, потому что единственное приемущество memcopy будет в том, что данные лежат в памяти подряд, что очень дружественно к кешу. Но вашем текущем решении и сами указатели и то, куда они указывают, итак лежат в памяти подряд (кроме одного индекса, где меняются массивы).
Вопрос: Насколько большая разница между Intel Core i7-1255U и Core i5-1235U в ноутбуках?

Лучший ответ:
Вот такая разница: notebookcheck.net

Это, по факту, один и тот же процессор, но в i7 чуть выше частоты и чуть лучше графика.

"Стоит ли доплачивать" - чтобы ответить на этот вопрос нужно понимать размер оплаты и толщину вашего кошелька.

Худший ответ:
До 2005 года мы жили в сладкой неге работающего закона Мура. Каждая новая покупка - удваивала производительность и играх и приложениях. Pentium, P-2, Celeron, P3, P4, Dual-Core .e.t.c.

Сегодня - потратишь несколько кило-баксов и получишь +10% (возможно) к работе офисных приложений. И то не всегда за счет процессора а за счет других небольших увеличений. Там где-то частота шин. Там где-то просто чуть более быстрый SSD.  А так ... просто покупать ради нового стикера на корпусе? Ну это как тюнинг авто. У кого синие светодиоды - тот и самый крутой в рабочем посёлке.

Вобщем пускай i5 работает пока не сгорит.
Вопрос: Можно ли переопределить метод в скомпилированной программе?

Лучший ответ:
Экстендите классы и переопределяете нужные методы.

Худший ответ:
в скомпилированной программет.е. исходников нет но развивать как то надо?
декомпилируешь и развиваешь

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

Гуглится десятки проектов-декомпилеров, советую самостоятельно в них разобраться.
java decompiler
Вопрос: Как запустить программу, установленную на жесткий диск в Windows, через Linux?

Лучший ответ:
Нет

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

Лучший ответ:
POST - создать сущность
PUT - обновить сущность целиком
PATCH - обновить часть сущности

Худший ответ:
Трансформирую, пожалуй, ответ от jazzus :)

- НЕТ, никаких практических отличий в коде, кроме как в роутах - нет.
Вопрос: Как вывести список с одним кортежем из трёх, в котором список состоит из чётных чисел?

Лучший ответ:
for x in l:
	if len(x[1]) %2 ==0:
		print(x)или:
s = [x for x in l if len(x[1]) %2 == 0 ]
print(s)

Худший ответ:
Я всегда пишу плохой код, но я бы сделал так.
l = [("a", [1, 3, 5, 6, 7]), ("b", [1, 2, 3, 4, 5]), ("c", [2, 4, 6, 8]), ("g", [2, 3, 6, 8])]
A = []

for SAS in l:
    Q = True
    for SUS in SAS[1]:
        if SUS % 2 != 0:
            Q = False
            break
    if Q == True:
        A.append(SAS[0])

print(A)
Вопрос: Можно ли оплатить 99$ на IOS до выкладывания приложения?

Лучший ответ:
Так оно до выкладывания и платится. Вы оплачиваете девелоперский аккаунт.

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

Лучший ответ:
На будущее. В продукахт Jetbrains для Go есть генератор структур, стоит просто в go файл вставить json

Смотрите:

Описание:
https://www.jetbrains.com/help/go/working-with-jso...

Итог:
type Resp struct {
	R struct {
		Max   int   `json:"max"`
		Items []int `json:"items"`
	} `json:"r"`
}

Худший ответ:
Тип в структуре неверный. Решение под спойлером:
код
package main

import (
	"encoding/json"
	"fmt"
)

type Resp struct {
	R struct {
		Items []int
	}
}

func main() {
	response := []byte(`{"r":{"max":900,"items":[1,3,5,7,3,1,7]}}`)
	r := Resp{}
	json.Unmarshal(response, &r)
	for i := range r.R.Items {
		fmt.Println(i)
	}
}
Вопрос: Как вывести данные в табличную часть формы?

Лучший ответ:
Взорву мозГ!!!
Можно использовать Динамический Список , на форме.

Добавляем реквизит


в "Настройку списка" заставляем свой запрос.

Реквизит закидываем на форму)

https://курсы-по-1с.рф/free/programming-in-1c-in-2...

Худший ответ:
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		НоваяСтрока =  Отчет.Подписки.Добавить();
		НоваяСтрока.Пользователь  = ВыборкаДетальныеЗаписи.Пользователь;
		НоваяСтрока.Подписка      = ВыборкаДетальныеЗаписи.Подписка; 
	КонецЦикла;
Вопрос: Как сделать статическую частоту?

Лучший ответ:
Она и должна меняться динамически, в зависимости от нагрузки. 3800 - это максимальный буст на 1 ядро, 3500 - максимальный буст на 4 ядра. Как вы хотите - так не работает.

Худший ответ:
https://losst.ru/chastota-protsessora-v-linux
А там уже поставишь нужную min и max частоту для нужного ядра или для всех сразу
Вопрос: Какой самый легкий путь для создания модели с помощью машинного обучения?

Лучший ответ:
Дело в том что рынок "машинного обучения" сильно перегрет. Каждый newcomer решает любую задачу маш-обучем даже если ему надо сложить 2 + 2. Я не шучу это действительно так. Доходит до смешного. Там где нужен фильтр низкой частоты или расчет арифметического среднего все пытаются втащить методы которые на два порядка сложнее и энергозатратнее.

По поводу вопроса. Допустим ты играешь в PacMan (желтый колобок который кушает белые точки на черном фоне) и ты хочешь просто найти пакмана - то тебе достаточно к примеру уменьшить размер экрана в 32 раза и тогда колобок станет размером в 1 пиксел (я предполагаю что он был размером 32 на 32). При усреднении цвета - брать max. Между черным и желтым - всегда выбирать желтый. Далее после того как колобок найден на мелком поле - и известны его координаты - можно двигаться в обратную сторону увеличивая масштаб. И за 5 итераций найти точные координаты ПакМана. В моём алгоритме вобщем-то нет никакого opencv. И я утверждаю что мой алгоритм менее ресурсоёмок чем все прочие подходы.

Впрочем это - просто идея. Ее можно бесконечно упрощать или улучшать. Возможен кейс когда враги скушали пак-мана и он будет плохо распознан моим методом. Вобщем есть огромное пространство для фантазии и алгоримизации без машинного обучения.

Худший ответ:
Не использовать машинное обучение, а сначала попробовать другие методы.
Если искомый объект подвергается только параллельному переносу, пробуй поиск по шаблону (opencv template matching).
Если он контрастен и также подвергается повороту и масштабированию, можешь искать по локальным особенностям (opencv feature matching).
Если известно максимальное смещение за кадр, можешь ускорить код, ведя поиск объекта только в окрестности предыдущего расположения.

И только если у тебя целая категория разнообразных, но похожих объектов, и ты готов предоставить неколько десятков тысяч изображений как с наличием, так и с отсутствием искомого объекта, только тогда стоит задумываться о машинном обучении.
Вопрос: Стоить ли брать 3060ti на GDDR6X памяти?

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

Вам могу предложить придерживаться такой же позиции.

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

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

В реальности если попытаться на железе конкретного производителя с конкретными кабелями проводить эксперименты, завести сеть можно и на бОльшем расстоянии (грубо говря сказано что можно 100 метров, а заведется на 110).

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

Что значит не заведется? - просто не включится нужный режим сетевой карты 1000/100мбит, это скачкообразно происходит, возможно на предельных размерах в считанные метры оно включится но будут ошибки на линии.

p.s. кажется большую (удобную) предсказуемость дает оптика, у нее наводок со стороны нет

Худший ответ:
Из личного опыта: СКС, длина трассы 160 м с двумя промежуточными коммутациями, на концах коммутаторы Cisco (2960 и 3750G) - линк на гигабите поднимается и нормально работает, есть лишь очень небольшой процент crc/frame errors
Вопрос: Как получить значение сообщения после 1 слова?

Лучший ответ:
msg = "Сообщение: привет, страна!"
clear_msg = msg.replace("Сообщение: ", "")
print(f"количество символов: {len(clear_msg)}, сообщение: {clear_msg}")

Худший ответ:
s="сообщение привет как дела"
s2 = " ".join(s.split(" ")[1:])
Вопрос: Какие средства для написания оконных приложений на C++ сейчас актуально учить?

Лучший ответ:
Qt. Ну и для винды из нового - winui3 (https://docs.microsoft.com/en-us/windows/apps/winu...)

Худший ответ:
MFC сейчас представляет только археологический интерес, WinAPI - палеонтологический.
Вакансии с ними - это поддержка копролитов, которые некому переписать на что-нибудь хоть сколько-нибудь современное. Учить их - нелепо.
Примерно так же нелепо учить программирование окошек на С++ только под Винду.
Потому что половина интернета уже на мобилах, кусок давно на Маках, частичка на Линуксах, и ее тоже случается учитывать. А если программа жестко вин-онли - так ее и пишут скорее на Шарпе, по локоть в M$-библиотеках.
Так что если желание писать на Крестах все еще есть, уже упомянутый Qt сейчас вполне разумный выбор.
Вопрос: Как можно найти центроид четырёх точек ( Quadrilateral ), зная координаты этих вершин?

Лучший ответ:
Вот тут хорошо расписано.

Сначала надо триангулировать четырехугольник. Потом, центр масс каждого треугольника - среднее арифметическое координат. Далее, остается найти центр масс двух точек - центров масс треугольников, где в каждой точке лежит масса равная площади треугольника.

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

Итоговая фромула (в векторах):
C = ((p1+p2+p3)/3*(p1p2*p1p3)+(p3+p4+p1)/3*(p1p3*p1p4))/((p1p2*p1p3)+(p1p3*p1p4))

Тут pi - i-ая вершина четырехугольника, pipj - вектор между точками i и j. pipj*pkpl - векторное произведение двух векторов.

Худший ответ:
Вот тут хорошо расписано.

Сначала надо триангулировать четырехугольник. Потом, центр масс каждого треугольника - среднее арифметическое координат. Далее, остается найти центр масс двух точек - центров масс треугольников, где в каждой точке лежит масса равная площади треугольника.

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

Итоговая фромула (в векторах):
C = ((p1+p2+p3)/3*(p1p2*p1p3)+(p3+p4+p1)/3*(p1p3*p1p4))/((p1p2*p1p3)+(p1p3*p1p4))

Тут pi - i-ая вершина четырехугольника, pipj - вектор между точками i и j. pipj*pkpl - векторное произведение двух векторов.
Вопрос: Как проверить неопределенное количество элементов?

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

Худший ответ:
Если each - это список, то тогда составь множество строк, соответствующих каждому элементу each.
Ты не написал, что такое self.strs, так что приходится использовать его.
strs_each = set( sefl.strs[e] for e in each )
А дальше просто, если длина strs_each больше 1, то есть разные строки.
Вопрос: Какое выбрать сетевое оборудование для 100+ПК (VLAN,VPN)?

Лучший ответ:
ставьте микротики и не парьтесь. все будет работать, тем более 1 вендор)

Худший ответ:
Тут либо  MIKROTIK CCR1016 либо cisco  либо поднимать шлюз на базе нижеперечисленных вещей

RouterOS x86
Kerio Control
pfsense
ipfire
OPNsense
OpenWrt и x86
Вопрос: Что делать с папкой windows, которая весит около 60 Гб?

Лучший ответ:
Запустите в консоли под админом 
Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore
Это покажет размер хранилища компонентов.
А очистить лишнее можно командой
Dism.exe /online /Cleanup-Image /StartComponentCleanup

Худший ответ:
Ничего не делайте.