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

Лучший ответ:
navigator.userAgent
 Информацию о браузере - устройствe и тп

fetch('https://api.ipify.org/').then(
  r => r.text()
).then(console.log);
ip

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

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

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

Про получение IP - адреса, уже написали в соседних ответах.
Вопрос: Что не так с моим ООП на Python?

Лучший ответ:
user = Newbie(login, password)
Какое-то неправильное ООП.

Метод logging наверно нужно переименовать, например на auth_user
И использовать в нём переменные экземпляра класса т.е. self.passwordи self.login

Худший ответ:
Поскольку метод не объявлен как статический, то нужно создать конкретный экземпляр класса и вызывать уже для него. То есть
newb = Newbie(login,password)
newb.logging(login,password)
Ну или ещё вариант — Newbie.logging(newb,login,password)
Кстати, если логин и пароль запомнили в self, то зачем передавать их в logging в параметрах ещё раз? Лучше используйте self.login и self.password.
Вопрос: Выдает ошибку «int() argument must be a string, a bytes-like object or a real number, not 'NoneType' », что делать?

Лучший ответ:
Зачем выводить в консоль input?
Если указывать текст в input он автоматически его выведет в консоль, print тебе не нужен

number = input("сколько человек в каждой команде?\n>> ")

Это должно помочь

Худший ответ:
number=print(input("сколько человек в каждой команде? "))

print() всегда возвращает None. Нафиг он вообще тут?
Вопрос: Как работает докер и нужен ли он для веб-приложений?

Лучший ответ:
1. Если контейнер содержит в себе веб-сервер, бд, то при написании второго приложения и его запуске в системе будет крутиться два веб-сервера?
Да. Но ничто не мешает использовать впереди один веб-сервер, и обслуживать им два контейнера с веб-приложениями.
 2. Насколько вообще оправдано использование докера например при написании веб-приложения на python?
Одно окружение что на сервере, что на рабочей станции разработчика.
Отличная интеграция в CI/CD на практике.
Нет необходимости засорять машину разработчика кучей установленных БД разных версий, доп. ПО и прочего. 
Легкость развертывания и прочее.
Так что достаточно оправданно... 
3. Если хост-система Windows, то для работы с докером нужно запускать виртуальную машину с Linux и на ней разворачивать докер?
Докер есть и под windows

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

Лучший ответ:
Техническое задание.

Худший ответ:
Куда угодно и удобно.
От readme.md, до вики-систем
Вопрос: Можете подсказать, как перевести программу в рекурсию?

Лучший ответ:
Раз уж речь о котлине, то точно нужна версия с хвостовой рекурсией.
fun fib(n: Int) = recursiveFib(n, 1, 1)
private tailrec fun recursiveFib(n: Int, p1: Int, p2: Int): Int = when (n) {
   1 -> p1
   2 -> p2
   else -> recursiveFib (n - 1, p2, p1+p2)
}

Худший ответ:
Вообще, вычисление чисел фибоначи через рекурсию гораздо легче, чем итеративно )
Определение числа фибоначи
F(1) = 1
F(2) = 1
F(x) = F(x - 1) + F(x - 2)

fun fib(n: Int): Int = when (n) {
    1,2 -> 1
    else -> fib(n-1) + fib(n-2)
}
(только тут нет обработки ошибок)
Вопрос: Как вывести значения из массива строк кроме указанных в другом массиве строк в Google Sheets?

Лучший ответ:
Попробуйте 

=FILTER('Лист1'!F:F;ISNA(MATCH('Лист1'!F:F;'Лист1'!K:K;0)))

Дополнительные примеры https://docs.google.com/spreadsheets/d/17mpcNilHA4...

Худший ответ:
Есть несколько вариантов.
Юзерфункция :
function arraysDiff(arr1, arr2) {
    arr1 = [arr1].flat(Infinity);
    arr2 = [arr2].flat(Infinity);
  
    arr1 = arr1.filter(el=>-1===arr2.indexOf(el));
               .map(el=>[el]);  
  return arr1;
}
Через Query():
=query(данные;"SELECT * WHERE B <> "&JOIN(" AND B <> ";список_исключений))
где B - столбец по которому ищем
Если данных относительно много - то первое подойдёт, если исключений с десяток - то второе вполне сработает
Вопрос: Как вместить в string больше слов? или что делать если в стринг не вмещаеться больше слов?

Лучший ответ:
Длина строки, назначенной Arguments свойству, долж...

Худший ответ:
Можешь сделать несколько переменных string и соеденить их:
First = "Hello"
Second = "World!"
print(First + " "  + Second) #Hello World!
Вопрос: Начальные уровни в программировании (Intern, Junior)?

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

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

Уровень определяется СОБСЕДУЮЩИМ кандидата.
Если ищут старшего специалиста, то кандидат получает эту должность в случае успеха.
И как правильно сказал  Лентюй не существует ни одного объективного критерия определения уровня программиста.
это все относительно. и сениор из одной тимы легко может стать интерном в другой.
Вопрос: Для чего нужны redux-thunk?

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

Худший ответ:
не только thunk, есть еще redux-saga, можешь в саге делать, можешь придумать что-то свое, более красивое и поддерживаемое чем санк или сага, последние ведь не сами появились, их кто-то написал.
Вопрос: Насколько целесообразно разбиение на функции и классы?

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

Рекомендую найти видео "Как писать код, который понравится вашим тестам" с первой PHPRussia. Там очень доходчиво рассказывается про то, почему надо делать простые методы. Не только для тестов. А ещё и для повторного использования и для упрощения поддержки кода. Когда надо прочитать основную логику модуля, то даже сокращение в два раза (по одному методу вместо двух строк кода) уже сильно облегчает задачу.
А если уж даже тест понял, что делает ваш код, то человек поймёт и подавно :)

Как вам написали выше - все дело в именах методов. Если они информативные, то есть если конструкция if ($this->function_7($a) && $this->function_8($b)) читается как связный английскй текст, то mission accomplished! Функции выполняют свою роль: легче всего читать код, которого нет. Вместо того, чтобы разбирать, что делает тот или иной код, можно просто прочитать небольшой текст на английском.

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

1000 строк кода на 3 класса - это не очень много. Это всего 300 строк на класс.
75 функций - это получается в среднем около 10-15 строк на функцию, что в принципе тоже ок.

По вашим словам больше ничего объективно сказать нельзя.
Вопрос: Будет ли скомпилированный код C++ работать на всех архитектурах процессора?

Лучший ответ:
Даже бинарник для х64 не будет работать под х32, что уж говорить о принципиально разных архитектурах. 
В исполняемом файле содержатся машинные команды для конкретной архитектуры процессора. 
Для другой архитектуры нужен другой исполняемый файл.
То же самое актуально и для разных ОС (бинарники для линукс и винды не совместимы). Но, обычно, есть варианты запустить бинарник от другой ОС - виртуализация, wine в линукс, WSL в винде.

Более того, например, если у вас приложение х64 и вы используете какую-то специфическую фичу процессора, которая есть только в определенных моделях процессора, то приложение будет корректно работать только на процессорах поддерживающих эту фичу. Если нужно, в приложении можно предусмотреть проверку процессора и если фича не поддерживается использовать какую-то универсальную реализацию.

Худший ответ:
Архитектура AMD64 является частным случаем архитектуры x86. Если скомпилировали под архитектуру AMD64, то на 32-битных работать не будет. А если скомпилировали для 32-битных, то будет работать и на 32, и на 64-битных
Вопрос: Несёт ли ответственность владелец WiFi за действия подключенных к нему пользователей?

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

Худший ответ:
В первую очередь да, придут за тобой. И ты будешь отвечать за действия твоих пользователей
Вопрос: Как смотреть статистику kea-dhcp сервера?

Лучший ответ:
В чём трудность просмотреть документацию к продукту, который ты решил использовать?
https://kea.readthedocs.io/en/latest/arm/stats.html
https://kea.readthedocs.io/en/latest/arm/dhcp4-srv...

Худший ответ:
Я нашел решение. Для того чтобы статистика начала работать нужно добавить в /etc/kea/kea-dhcp4.conf следующую строку.
"hooks-libraries": [ { "library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_stat_cmds.so" } ],
Этим мы подключаем библиотеку для парсинга данных в логах/журналах и вывода статистики на экран.
Вопрос: Как мне быть, если HP Support Assistant больше не работает в России?

Лучший ответ:
Снести его нафиг и забыть, меньше мусора в системе будет.

Худший ответ:
Здравствуйте! Попробуйте установить HP Support по этой ссылке https://ftp.hp.com/pub/softpaq/sp114001-114500/sp1... У меня всё прекрасно установилось и работает.
Вопрос: Разница между сервером и хостингом?

Лучший ответ:
Для чего-то больше чем визитка или простенького сайтика на вордпрессике или php лучше всегда брать vds сервер

На vds больше простора, можно ставить нужное ПО, конфигурировать все что угодно своими руками без необходимости писать в саппорт и молить установить нужную софтинку.

Худший ответ:
что нужно выбрать?
сервер(VPS)
Вопрос: Почему не формируется массив из цикла по XML?

Лучший ответ:
Привет от выскочки
<?php
$xmlstr = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="27 Jul 2022 18:25:14">
    <shop>
        <name>Официальный интернет-магазин KRUPS</name>
        <company>ООО "Фирменные решения"</company>
        <currencies>
            <currency id="RUB" rate="1"/>
        </currencies>
        <categories>
            <category id="7">Продукты</category>
            <category id="12" parentId="7">Кофеварки</category>
            <category id="11" parentId="12">Капельные кофеварки</category>
            <category id="2" parentId="7">Автоматические кофемашины</category>
            <category id="3" parentId="7">Рожковые кофеварки</category>
            <category id="5" parentId="7">Кофемолки</category>
            <category id="10" parentId="7">Капсульные кофемашины</category>
            <category id="4" parentId="10">Nescafe Dolce Gusto</category>
            <category id="9" parentId="10">Nespresso</category>
            <category id="6">Аксессуары</category>
            <category id="8" parentId="6">Аксессуары для кофемашин</category>
        </categories>
    </shop>
</yml_catalog>
XML;
$xml = new SimpleXMLElement($xmlstr);
$cat = [];
foreach ($xml->shop->categories->children() AS $category) {
    $id = (int) $category->attributes()->id;
    $value = (string) $category;
    $cat[$id] = $value;
}
var_dump($cat);

Худший ответ:
Хммм, $value['id'] и $value одновременно?
Что-то тут не складывается.
Может нужно указать ключ типа $value['title'], или как-нибудь ещё?
Вопрос: Проблема с графическим процессором?

Лучший ответ:
Стресс-тесты отдельно на процессор, память, графику.
Если ошибок нигде нет - то дело в игре.
Если есть ошибки по графике - взять чуть более старые стабильные дрова на видео и проверить ещё раз.

Худший ответ:
Как по мне для RUST 8 гигов оперативки мало! Ему минимум 10 требуется и в 2х канале конечно же!
Вопрос: Заполнение и отправка формы в точно указанное время, можно ли?

Лучший ответ:
Тут все зависит от маленького нюанса, а именно, что будет если отправить форму на секунду раньше? Форма не отправится? Или отправится, но скидку не получишь?

Худший ответ:
Скрипт будет зависеть от верстки сайта, и будут меняться при ее изменении. Браузеры имеют вместе с консолью разработчика отличный инспектор, если нажать правую кнопку мыши на желаемом элементе на форме (если возможность заблокирована, то нужно жать shift+правая кнопка мыши) и выбрать Inspect/Посмотреть код, а затем уже в открывшемся инспекторе выделить нужный элемент (input например) и в меню выбрать Copy -> CSS selector, то полученную строку можно напрямую скормить $('строка css selector') и получить нужный элемент, у которого можно править .value=xxx или нажимать .click(). Могут возникнуть сложности с кастомными select или там где форма отслеживает нажатия на клавиатуре,..

В борьбе с блокировщиками рекламы и автоматизаторами некоторые веб разработчики научились создавать такую верстку, что в ней сложно определить простые правила css selector, так как они будут меняться (но не невозможно, например с помощью getBoundingClientRect() к каждому элементу на странице можно определить его координаты (и видимый ли он) и уже по координатам идентифицировать нужный (блокировщики пока не умеют его использовать но автоматизаторам уже не проблема), так же можно поглядывать на текстовое содержимое, например выделяя подписи к элементам формы.

Еще проблема - тайминги. Момент времени можно подобрать с помощью setTimeout, например переставляя его ежесекундно можно постоянно пересчитывать интервал (смотреть текущее время, целевое время и время установки предыдущего интервала, вычислять ошибку в миллисекундах, которую вносит браузер), чтобы в момент икс последний setTimeout выполнился точно в срок. Еще важно, время на сервере может отличаться от времени на клиенте, точное можно попытаться определить из заголовков запросов к серверу XMLHttpRequest.getResponseHeader() к не статичным файлам, но это конечно не дает гарантии. Плюс можно попытаться вычислить ту половину пинга, которое сетевой пакет тратит чтобы перейти от клиента к серверу, плюс поправка на скорость работы самого браузера (экспериментами, в т.ч. с теми же запросами, на которых время на сервере определяешь). Так же можно проанализировать как отвечает сервер в момент нагрузки.

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

p.s.  а потом осознать, к примеру, что декларируемые и фактические правила получения скидки у владельца сервиса - отличаются.
Вопрос: Как называются &quot;\n&quot;,&quot;\r&quot;,&quot;\t&quot;... в строках?

Лучший ответ:
В общем случае - escape sequences, управляющие последовательности по-нашему.

Худший ответ:
Это специальные управляющие последовательности (англ. escape sequences), которые используются для записи пробельных (непечатных) символов (англ. whitespace characters). Все эти символы соответствуют шаблону \s в регулярных выражениях:
import re

print(all(re.fullmatch(r'\s', string) for string in ('\n', '\r', '\t', ' ')))  # True
Вопрос: Какие самые лучшие кресла для длительной работы за компьютером?

Лучший ответ:
1) Ergohuman Plus
Поясничный упор есть, можно отрегулировать по высоте.
Подголовник только по высоте и углу наклона, то есть поддержка в откинутом состоянии. Если нужна поддержка и в рабочем (при спинке в 90 градусов), то выбор сильно сужается, мало у каких кресел есть такое.
Кресло бывает полностью сетчатое, кожаное, либо с сетчатой спинкой и тканевой сидушкой с наполнителем ППУ.

2) Okamura Contessa 2
Поясничный упор опциональный (как доп опция).
Но кресло не всем по габаритам подойдёт. На мои 183 оно кажется маленьким (неглубокая сидушка, низкая спинка).

3) Mirus
Тот же производитель, что и Ergohuman.
Механизм качания такой же. Тут цена меньше за счёт того, что корпус в пластике только и подголовник по высоте регулируется только (за счёт гибкости конструкции угол наклона можно подстроить, но на любителя).

4) Norden Startrack
Если не нужен навороченный механизм качания, то можно рассмотреть его.
Спинка по высоте имеет хороший диапозон регулировок (до 190 см проблем не должно быть)
Поясничный упор отдельно от спинки регулиуертся по высоте (без регулировки по глубине).
Подголовник можно отрегулировать по высоте, углу и глубине.
Из минусов:
-маленький радиус у колёсиков и с натяжкой катаются.
-подлокотники только по высоте регулируются и имеют анатомическую форму (на любителя).

А так конечно всё равно лучше померить в шоуруме где-нибудь.
Одно дело характеристике на бумаге, другое — своей спиной ощутить.
Могу ещё чем-то помочь, если вопросы будут.
Ссылок нет, почему-то теперь нельзя публиковать ответ с ними =(

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

Лучший ответ:
Самый верный вариант - установить серверную ревизию windows (дорого) либо (бесплатно) - linux  с samba. Поднять в виртуалке особых проблем не составит.

p.s. можно попробовать windows сборку samba от cygwin, несколько лет назад читал про успешные поытки (даже рнешали проблемы с кирилицей)

сейчас возможно поможет wsl

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

Лучший ответ:
На своём компьютере.

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

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

P.S. Хотя для вашей ситуации можно на сервере подписать данные электронной подписью или зашифровать их и на сервере же проверять подпись/расшифровывать. Но если ключ будет один на всех, то можно будет подставить данные с другого клиента, а если ключ будет свой для каждой сессии, то проще хранить данные в сессии и не отдавать клиенту.

Худший ответ:
Надо на сервере проверять данные.
И если у тебя всё время значение wazny.com, то зачем его вообще передавать? Если проверять, откуда прилетели данные, то смотри переменную $_SERVER['HTTP_REFERER']. Но, по идее, злоумышленник и это может подделать.
Вопрос: Как отсортировать массив в php?

Лучший ответ:
В общем случае - составить две формулы, получение номера столбца и номера в столбце и использовать их в usort.
В данном случае вторая формула не нужна, поскольку внутри столбца порядок сортировки стандартный.
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18];
usort(
    $arr,
    function (int $a, int $b): int {
        $result = (($a - 1) % 6) - (($b - 1) % 6);
        return $result === 0 ? $a - $b : $result;
    }
);
print_r($arr);
/* Array
(
    [0] => 1
    [1] => 7
    [2] => 13
    [3] => 2
    [4] => 8
    [5] => 14
    [6] => 3
    [7] => 9
    [8] => 15
    [9] => 4
    [10] => 10
    [11] => 16
    [12] => 5
    [13] => 11
    [14] => 17
    [15] => 6
    [16] => 12
    [17] => 18
) */

Худший ответ:
Подели сначала на 3 отдельных массива
1 2 3 4 5 6

7 8 9 10 11 12

13 14 15 16 17 18

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

Лучший ответ:
Это война снаряда и брони, то есть она бесконечна. Её невозможно выиграть. Как только вы улучшаете броню, противник в ответ улучшает калибр снаряда, и так по кругу. Лучшим решением будет попытаться остановить войну, помешать её течению, а не наращивать мощь вооружения.

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

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

Ещё приём - в дополнение к предыдущим - отсроченное наказание (модератором). "Игрок" не будет получать немедленное подкрепление в виде "молодец, обошёл фильтр", а будет вынужден ждать жюри. Однако ждать никто не любит, это тоже сильно бьёт по мотивации продолжать игру в сопротивление системе. Поэтому многие "партизаны" перейдут на сторону добра, ибо скучно.

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

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

Словарь мата, который я использовал: https://github.com/lcomrade/mat-defender-discord-b...
Вопрос: Почему нет интернета?

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

Либо клонируйте мак адрес с пк

Худший ответ:
У провайдера включена привязка по мак адресу. Изменил мак у роутера и все заработало.
Вопрос: Подойдет ли raspberry pi для программирования на python?

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

Худший ответ:
Смотря какую цель преследуете.
К примеру в моем случае - малинка весьма удобна для сопряжения со всякими рода устройствами. Через тот же GPIO ногами подрыгать...
Но я не пугаюсь  работы с текстовой консолью и отладки через принты))), а сверхзадач для малинки типа обучения нейронок  или там работы с биг датой - не ставлю....
Подойдет ли это вам - и какие вы перед собой задачи ставите - неизвестно.
Вопрос: Как занести в черный список сайты на VDS Ubuntu 20.04?

Лучший ответ:
чтобы при пинге выдавало 127.0.0.0
Как вариант - свой DNS

Худший ответ:
прописать в /etc/hosts на VDS

%доменное имя% 127.0.0.1

это перенаправит доменное имя на локалхост.

чтобы запретить ip адрес надо воспользоваться iptables 
статей море, к примеру https://losst.ru/kak-zablokirovat-ip-v-iptables