Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как проверить есть ли в тексте выделение жирным?

Лучший ответ:
Можно спарсить фрагмент HTML в документ, в котором обычными методами вроде querySelector() поискать нужный тег:
const code = `
<li class="search__list-item">
  <div class="search__img-wrap">
    <img class="search__img search__img_indents" src="search.svg" alt="Иконка">
  </div>
  <strong>поиск</strong>
  текста
</li>
`;

const parser = new DOMParser();
const doc = parser.parseFromString(code, 'text/html');

if (doc.querySelector('strong')) {
  console.log('Есть!');
}

Худший ответ:
Напоминаю, что еще может использоваться тег <b></b>

const regExp = <\/strong>|<\/b> // ищем </strong> или </b>
regExp.test( /* text here */ ) // true -> значение найдено

еще вариант регэкспа:
const regExp = <(\/)?b>|<(\/)?strong> // <b> или </b> или <strong> или </strong>
Вопрос: Как сделать выбор места в автобусе?

Лучший ответ:
Важный момент: будет большое количество разных автобусов или будет использоваться всего несколько автобусов? Если будет определенное количество автобусов, которые ты уже знаешь, то можно сделать так:
1) Для каждого из этих автобусов создать ресурс, он не должен отображаться на сайте, сделай тип документа Ссылка и переводи на главную например. Для этих ресурсов создай три TV - количество мест для посадки, схема посадки (тип TV image или fastupload), и координаты мест - тут должен быть ассоциативный массив вида "№ места":"координаты полигона на схеме".
2) Если каждая поездка/тур - это отдельный товар minishop2, то можно создать кастомное поле товара, если умеешь, если нет - то создай TV. В данном поле будет указываться ID ресурса-автобуса для данной поездки.
3) Важно заметить, что в совершенном заказе должен сохраняться № купленного места или мест. Когда юзер будет покупать эту поездку, на бэке формируешь карту изображения (схемы посадки автобуса) с учетом уже совершенных заказов этого товара. Если количество мест в оплаченных заказах равно количеству мест в автобусе, то выводишь сообщение, что все места распроданы. Если еще есть, то выводишь схему с кликабельной картой изображения. Я бы использовал maphilight.js
Пример схемы посадки
В принципе все. Далее уже функционал за тобой. Занятые места можешь подсвечивать красным, свободные зеленым и задать им класс, на который повесишь обработчик клика. По клику можешь писать № места в свое поле заказа.

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

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

Худший ответ:
У вас есть товар "поездка в автобусе из пункта А в пункт Б" места это опции данного товара - у товара 17 различных опций и на складе есть по одному экземпляру каждой из них, пока его кто-то не купил/положил в корзину(бронирование). 
Что можно реализовать через стандартные плагины(торговля). при желании - кастомизировать выбор опций в виде схемы салона.
Но тут не понятно как быть с датой поездки...
Вопрос: Как быстро поднять инфраструктуру предприятия?

Лучший ответ:
Это разовая акция? Есть смысл строить автоматизацию?
terraform, ansible , многое зависит от гипервизора. чтото легче автоматизируется ,чтото хуже.

Худший ответ:
Как это сделать быстро?Единственный способ - пригласить специалиста, который делал все эти вещи.  Если конечно надо сделать не только быстро но и качественно.

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

Что вебсервер, что телефония, что 1с - это все требует знаний и опыта в конкретной области.
Поэтому вполне вероятно что приглашать придется не одного специалиста.
Без знаний по мануалам настроить можно,  и может быть вам повезет и все заработает,  но вряд ли это будет быстро.
Вопрос: Аналог Ansible без yaml?

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

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

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

А лицо, которое уже решило, оно знает, что если серверы обрабатывают персональные данные по ФЗ-152, ему, этому лицу, надо искать сервис, который сертифицирован под это дело (и берет за это дополнительные деньги).

Еще лицо должно понимать, что в стойках должны быть средства удаленного управления типа KVM на все устройства, потому что вместо простого Васи, который может побежать в серверную и нажать резет, визит в датацентр (особенно работающий по ФЗ-152) - будет тот еще веселый аттракцион.

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

Худший ответ:
В Новосибирск повезете?
Вопрос: Сетевые соединения?

Лучший ответ:
Это два зарезервированных стандартных адреса. 
default route(:: = 0.0.0.0) и loopback (::1 = 127.0.0.1)

Худший ответ:
Это ipv6 адреса. 
:: - все нули, аналог 0.0.0.0 в ipv4 - слушать все.
::1 - это все нули, последняя 1.

Такое обозначение значит, что служба слушает и ipv4 и ipv6 интерфейсы на этом порту
Вопрос: Какие есть CMS, аналогичные Wordpress, с возможностью писать фронт на vue?

Лучший ответ:
Зачем искать, если wp и так умеет rest api

Худший ответ:
WordPress не фреймворк) и можно сделать wp+Vue
может вот это подойдёт?
Вопрос: Будет ли работать Интернет без света, если он идёт через распределительную коробку?

Лучший ответ:
Был бы ваш провайдер беспроводным - так бы работало. А так - нужно запитать Ваш роутер, свитч на техэтаже (чердаке) здания, свитч на чердаке здания, куда приходит аплинк от Вашего здания и т.д. вплоть до свитча на здании провайдера (такая очень обобщенная схема).
Как видим, в схеме очень много узлов и отключение одного из них - это отвал всех, кто в структуре "ниже".

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

Лучший ответ:
Не знаю как сейчас дела с Android, но среди spring'овых разработчиков, ищущих первое рабочее место, конкурс примерно двести человек на одно место. Так что 15 компаний и один месяц - это мелочи.

Худший ответ:
Кликаешь 15-30 вакансий, ждешь сутки, кликаешь еще столько же) Не забывая, что рекрутеры в выходные отдыхают
И где-то через 2 недели такого ритма будут собесы и даже парочка офферов 
Это если ты миддл
А если джун, все 50
За спрос денег не берут, а вероятность до кого-то достучаться увеличивается
И это на всех стеках так
Вопрос: React | Как убрать повторяющиеся ../ в пути?

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

Если ты используешь cra, то придётся костылить, через craco или подобное.

Худший ответ:
ЕСЛИ я не ошибаюсь, знак тильды используется в стеке asp.net, где этот знак указывает на корневую папку в проекте. Я не уверен, что в вашем случае так можно сделать, по крайней мере, в реакте.
Вопрос: Какие существуют адекватные способы предотвратить сбрасывание SSH тунелей?

Лучший ответ:
Варианты такие - на винде уже долгое время есть  openssh клиент, который кипэлайвы умеет. Может стоит попробовать его вместо putty & co?

И пробовали ли вы метод описанный здесь? https://stackoverflow.com/a/53175117
Для винды возможно потребуется какая-то адаптация скрипта

Худший ответ:
Как наитием возникла идея ограничить KeepAlive именно на сервере.
Если я всё правильно понимаю, то если я поставлю, условно:
TCPKeepAlive yes
ClientAliveInterval 60
ClientAliveCountMax 0
То при повисшем соединении plink упадёт и я смогу отловить это падение уже на стороне клиента и перебросить тунель
Вопрос: Как зашифровать css файл через константы?

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

Худший ответ:
Зашифровать не проблема. Любой архиватор с паролем.
Только использовать нельзя будет, пока не расшифруете. Браузер же как-то должен читать этот файл.
Вопрос: Как защитить приложение на js+php пока не заплатили?

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

Развернуть приложение полностью на 100% на своем сервере, а код разместить в своем приватном репозитории.
Показать клиенту, что все задачи выполнены по ТЗ.
Получить оплату на 100%.
Разместить приложение на сервере клиента, а код - в его репозитории.


Просто по договоренности оплата пойдет только после установки программы на компьютер клиента.
Если в прошлый раз клиент кинул - что помешает ему сейчас кинуть? Просто не передавайте результат до оплаты, аргументируя это предыдущим случаем.

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

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

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

Но это всё спички, а ты на них экономишь. Если ты выбрал питон, то про слово "производительность" забудь в 99% случаев. Да и вообще, (почти) любой код — про читаемость прежде всего. Да, есть места вроде ядра linux, драйверов, embed и т.п., где пишут нечитаемый код, лишь бы выполнялось быстрее. Но питон от этого настолько далеко, насколько можно представить, только ещё чуть дальше.

P.S. операция in над списком обычно не выполнятся, т.к. очевидно, сложность будет O(n). Если элементов списка не три, а значительно больше, то стоит заменить на set. Так и читабельней и быстрее.

Худший ответ:
Если у тебя не миллионы элементов в коллекции - разница вряд ли будет.
А если так, то достаточно создать коллекцию один раз и переиспользовать её, а не делать это внутри if - и разницы не будет.
Вопрос: Где в qna habr находятся мои удаленные вопросы?

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

Худший ответ:
Полагаю, что они помечаются, как удалённые, но физически из базы данных не удаляются
Вопрос: Как правильно отрисовывать списки по 3 во vue js?

Лучший ответ:
уберите тег Vue, так как ваша проблема не является проблемой по VueJS.
Прочтите про flex'ы, grid'ы. Должно помочь.

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

Лучший ответ:
Немного поделюсь своим опытом. Он относится к опенсорсу и заказной разработке. 
Так вот вы вкладываетесь в какой то проект. Даже выкладываете его в опенсорс. 
Положим проект стоит по вашему прайсу 60 000 рублей. 
Любой парень берет ваш проект и продает его за 10 000 руб? Так?
Только это не всегда работает. Просто поправить заголовки и иконки, может и сработает, но что то более серьезное и стоимость доработок у хозяина стоит меньше чем у этого пришлого паренька, потому что он просто не знает всей "кухни". 

Поэтому не тратьте времени на защиту. Просто выберите хорошую лицензию и повесьте свои контакты

Худший ответ:
Не на каких, на готовое спроса нет.
Вопрос: У кого есть UnityHub 2.x.x?

Лучший ответ:
Ссылка вот

Худший ответ:
Моло ли что тебе не нравится.
Ну вот не будет Unity со старым хабом работать, и автообновит его, и всё тут.

Не вижу смысла в таком возмущении - это всё равно что говорить "Я не буду жить в этой квартире, тк тут ключ от домофона не красивый"
Вопрос: Eсть ли простые аналоги zabbix?

Лучший ответ:
А чем сложен заббикс? Один раз установил сервер, вебморду, накинул изкоробочных шаблонов - и всё.

Худший ответ:
Попробуйте это
https://www.solarwinds.com/server-application-moni...
Вопрос: При sql запросе писать с кавычками или без?

Лучший ответ:
Безопаснее и правильнее использовать PDO или MySQLi вместо устаревших mysql_ - функций.
Ну, и с обоими вариантами нужно использовать подготовленные запросы вместо того, чтобы писать их вручную.

Получится что-то вроде этого:
$host = '127.0.0.1';
$db   = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
$pdo = new PDO($dsn, $user, $pass, $opt)

$stmt = $pdo->prepare("SELECT last_name FROM first_table WHERE name=?");
$stmt->execute([$name]);
$last_name = $stmt->fetchColumn();

Худший ответ:
1) безопаснее с кавычками - так говорит препод по бд (почему не спрашивал, преподает уже больше 10 лет)
2) писать с кавычками - вы же сравниваете атрибут таблицы с определенными именами, а не другим атрибутом
Вопрос: Как с помощью Flask сделать динамический вывод данных из txt файла?

Лучший ответ:
Да, разными способами.
1. можете поллить раз в секунду javascript'ом и обновлять содержание textarea
2. можете просто на страничке только раз подгружать тот файл, но в страничке сделать  <meta http-equiv="refresh" content="30">
3. если прямо красиво хотите - можете использовать websocket (socket.io). Может вам понравится, я писал для этого удобный модуль - https://github.com/yaroslaff/ws-emit , там пример dir2web.py как раз на Flask, прямо с вашей задачей (только он еще и появление новых файлов в каталоге отслеживает). Изменение контента на странице происходит моментально после изменения файла. (в ютуб видео с примером это с 50-ой секунды).

Худший ответ:
В итоге сделал через setinterval функцию с отправкой запроса на нужный url с методом get.
Дальше написал декоратор к этому url с методом get, в котором читаю нужный файл, обрабатываю(в том числе по длине, иначе долго грузит) и возвращаю string, которую в свою очередь и помещаю в textarea. (Ну и прописал тут же scroll down, чтобы видеть самые последние данные в textarea при каждом обновлении).
Не знаю насколько это правильно, но это работает именно в том виде, что мне нужно. Если есть комментарии по этому поводу, готов выслушать (прочитать)
Вопрос: Требуется ли для позиции джуна на django портфолио?

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

Худший ответ:
Если человек силен в софтскилах ему не нужен портфолио
Вопрос: Как проверить что мешает открытию портов win server 2012?

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

Худший ответ:
TCPview из пакета sysinternals Марка Руссиновича
Вопрос: Хорошие курсы по бд(возможно платные)?

Лучший ответ:
Курсы бесполезны, они приносят пользу только их авторам. Читайте учебники и документацию вашей СУБД.

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

Лучший ответ:
Функция выполняется только 1 раз из-за того что ты её вызываешь только 1 раз.

Худший ответ:
Для этого вставте вашу функцию внутрь while (true) { ... }
Вопрос: Как в Robots разрешить индексацию каталога который находится глубже того каталога который запрещен?

Лучший ответ:
Все просто: 
Disallow: /components/
Allow: /components/my_component/images/

Худший ответ:
Стандартно прописать для него аллоу
Вопрос: Как устроен поисковый индекс Google?

Лучший ответ:
Google использует шаблон map-reduce. Это когда исходная выборка (индекс) может быть разрезана на беконечно большое число partitions. Можно резать по хешу от hostname. Это дает возможность запускать ваш поисковый запрос не на 1 хосте а сразу на 1000 hosts и потом просто выдать сортированный union первых top n релевантных результатов. Кроме того google может кешировать ответы. Это снижает нагрузку на дубли поисков. 

Этот шаблон известен. Просто google первый поставил задачу отказа от сверх-дорогих и ресурсоёмких серверов и перешел к использованию множества дешевых серверов но соединенных в поисковый grid. Кроме того файловые системы навроде hdfs дают возможность на обычных жлобских HDD делать бесконечно большую файловую систему. У этой ФС конечно есть недостатки. В частности она может быть не консистентна. Но для периодически обновляющегося текстового индекса - это норм. Типа eventual consistancy.

Худший ответ:
Где то так https://habr.com/ru/amp/post/20724/
Хотя это скорее Яндекс. 
Могу предположить что первым отрабатывает анализатор запроса потом идёт запрос в keyvalue хранилище по всем ключевикам
Потом идёт корреляция по нахождению фраз 
Потом корреляция по национальности.

По реализации ищите FTS engine.
Вопрос: Как избежать постоянных проверок на null при вызове java класса?

Лучший ответ:
Сделать 1 метод обертку, типа такого:

private static void Call(string name) 
{
if (javaObject != null)
javaObject.Call(name);
}

И вызывать его вместо javaObject.Call

Худший ответ:
Берёте монаду Maybe (в Haskell) и Железнодорожно-ориентированное программирование.
Вопрос: Как сделать команду которую могут использовать пользователи с определенной ролью discord.py?

Лучший ответ:
Создайте собственную проверку на наличие определённой роли на определенном сервере:

def is_special():
    async def predicate(ctx):
        guild = bot.get_guild(365017572336731127)
        if not (member := guild.get_member(ctx.author.id)):
            return
        return guild.get_role(129386605897151407) in member.roles
    return commands.check(predicate)

@bot.command()
@is_special()
async def cmd(ctx, ...):
    ...

Худший ответ:
Создайте собственную проверку на наличие определённой роли на определенном сервере:

def is_special():
    async def predicate(ctx):
        guild = bot.get_guild(365017572336731127)
        if not (member := guild.get_member(ctx.author.id)):
            return
        return guild.get_role(129386605897151407) in member.roles
    return commands.check(predicate)

@bot.command()
@is_special()
async def cmd(ctx, ...):
    ...
Вопрос: Отключить показы на Windows в Директе и Ads возможно?

Лучший ответ:
Это невозможно. Есть только опции настройки по устройствам и мобильным ОС Android и iOS.
Вы можете попробовать взять сегмент пользователей Windows в своей Яндекс.Метрике и через корректировку отключить показы похожим пользователям, но точность будет всё равно низкая.

Худший ответ:
Только по типу устройств. Можно фильтрануть только в ретаргетинге ОС
Вопрос: Жизненный цикл Go?

Лучший ответ:
Хорошо живёт. Если имеется ввиду HTTP, то (обычно) на каждый запрос го пуляет новую горутину, после обслуживания запроса горутина умирает. Главная горутина живёт бесконечно долго (от запуска до shutdown'а)

Худший ответ:
Обычно на Go пишут микросервисы. А они не должны умирать. Как раз совсем наоборот должны работать очень долго.
Вопрос: Хочу заняться программирование БПЛА/ ИИ на БПЛА, с чего начать?

Лучший ответ:
С лётных симуляторов. Выбирайте те, у которых есть API с телеметрией.
Имея АПИ, можно пробовать писать код.

Худший ответ:
Не знаком с авиацией. Но предположу что современный БПЛА такой же сложный как и хорошая операционная система. В нем будет несколько уровней управления. Или несколько одновременно работающих и независимых систем. Одна из них будет - автопилотом. Это то что будет контролировать азимут и тангаж и высоту и прочее. Компенсировать ветры и воздушные ямки. Будет другая система связанная с полу-ручным управлением. Будет третья система связнная с тактической задачей. И еще много чего. То что автор называет ИИ - это может быть либо одна из этих систем, либо все вместе взятые. Все вместе - автор не потянет. Тут нужны специальные знания из авиации. Взять какую-то одну из систем (то что он называет ИИ) и просто начать ее программировать - это профанация с моей точки зрения. Или очень поверхностный подход. Я просто не верю в эффективность подобного метода когда речь идет о технике которая дорого стоит. Но потренироваться на симуляторах - вполне себе можно.
Вопрос: Как правильно использовать useCallback и функцию, обёрнутую в memo?

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

React гарантирует, что идентичность функции setState стабильна и не изменяется при повторных рендерах.
Ничего оборачивать не надо.

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

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

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

Худший ответ:
Бооооооооольшой повер банк который должен успеть зарядиться при работе двс. А при простое должен отдать все накопленное не успев сесть. Здесь неминуемо вы получаете потери при преобразовании 12 в 19в это тоже надо учитывать. Если не критичный софт то посмотрите в сторону Планшета будет намного проще. И вопрос возникает (но тогда через час-два имеем другую проблему - пустой аккумулятор) это что за аккумулятор такой и ноутбук что за 2 часа высаживает все ))
Вопрос: Почему не работает hasMany в laravel?

Лучший ответ:
public function show(int $id)
    {
        $post=Post::find($id);
        $comments=$post->comments()->get();
        dd($comments);
    }

или 
public function show(int $id)
    {
        $post=Post::find($id);
        dd($post->comments);
    }

Худший ответ:
Внешний ключ в миграции комментов объявите так:
<?php
...
$table->foreignId('post_id')
                ->nullable()
                ->constrained()
                ->cascadeOnUpdate()
                ->nullOnDelete();

В модели комментов сделайте так:
<?php
...
public function post() {
        return $this->belongsTo(Post::class);
    }

А в модели поста так:
<?php
...
public function comments()
{
     return $this->hasMany(Comment::class);
}

Здесь можете посмотреть миграции и модели из рабочего проекта
Вопрос: Как будут юридические последствия разработки vpn приложения в России и публикации его на Playmarket?

Лучший ответ:
Не вижу никакой связи между ФЗ-276 и Вашими вопросами. Данный закон не запрещает разрабатывать и публиковать приложения vpn. Он обязывает делать следующее:
- Если ты содержишь vpn-сервер, то ты обязан блокировать доступ к сайтам изх списка РКН
- Если ты этого не сделаешь, то твой сервис заблокируют, а приложения попросят удалить из сторов. И гугл с эпплом удалят как миленькие, и не на такое их прогибали.

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

Пол страны VPN используется для бизнеса, те же филиалы соединять. Начиная с ЛЮБЫХ крупных гос компаний, типа Сбера,газпрома итд  и заканчивая мелким бизнесом с территориально распределенными точками