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

Лучший ответ: Blender и сценарии на питончике

Худший ответ: Как раз работаю с подобным проектом, для создания видео, WPF/.Net. 
Первая библиотека - Accord.Video.FFMPEG;
Пример:writer = new VideoFileWriter();
writer.Open("_temp.mkv", 1280, 720, 5, VideoCodec.MPEG4, 1900000);
// Затем закидываем кадры:
RenderTargetBitmap rtb = new RenderTargetBitmap(
            (int)canvas.ActualWidth, (int)canvas.ActualHeight, 96, 96,
                 PixelFormats.Default);
rtb.Render(canvas);
var bi = rtb.GetBitmap(1280, 720);
writer.WriteVideoFrame(bi);С чего хватать кадры, не важно, у меня Canvas, можно и WebView.
Звук чуть сложней, либа - NAudio.Wavevar mixer = new MixingSampleProvider();
// Закидываем звук по времени.
var off = new OffsetSampleProvider(sampleSource);
off.DelayBy = TimeSpan.FromSeconds(sec);
mixer.AddMixerInput(off);
// Энкодим в файл
MediaFoundationEncoder.EncodeToMp3(mixer.ToWaveProvider16(), audioTempFileName, AUDIO_BITRATE);
// Затем эту пару скармливаем FFMpeg
string args = @"-err_detect ignore_err -i " + audioTempFileName + " -i " +
               "_temp.mkv" + " -c copy -c:v libx264 -c:a libmp3lame -shortest " + outFileName; //libvorbis libfaac libmp3lame
RunProcess(args);Более кардинальное решение это игровой движок Unity (C#), там море вкусностей, хотя и придется его полностью учить: 3D, GPU, камеры, запись в реальном времени и покадрово, редакторы анимаций и спец-эффектов.
Там есть компонент для записи камеры в видео файл, готовите сцену по данным, запускаете запись. Никакой возни с таймингами и промежуточным форматами.
Вопрос: Как использовать requests для API python?

Лучший ответ: Ссылочки не плохие. Но при использовании requests рекомендую при возможности использовать json это легче и удобней чем парсить html

Худший ответ: Вот нашел видео, где учат работать с API на python https://www.youtube.com/watch?v=0x0hOdvhCXU . 
Тут с лева указанный тип запроса какой нужно сделать, с права url запроса, начало всех url там https://smartcat.ai/api/, после идёт то что указанно в api, например /integration/v1/document, вместе получается https://smartcat.ai/api/integration/v1/document, в данном случае нужно делать get запрос. Ну и передавай нужные параметры при запросах. Какие? Они описаны в API.
Вопрос: Как сильно упадет сайт по SEO после смены домена?

Лучший ответ: Сделай редирект на новый домен, упадет думаю на 70%, затем наверстает позиции.

Худший ответ: Редиректить надо. Иначе упадёт на 200%, и будет долго подниматься (пока робот не поймёт, что ты не плагиатор)
Вопрос: Какие технологии применить для разработки сайта?

Лучший ответ: Зачем-то решается применение CMS, хотя там даже авторизация не требуется. А как вы собираетесь информацию заполнять, редактировать, удалять? Все, кому не лень смогут это сделать?
А так wordpress + api карт

Худший ответ: Самописного маленького скрипта хватит + api карт
Вопрос: Почему b == number?

Лучший ответ: Ты присваиваешь локальной переменной a ссылку на глобальное свойство window.b, которое создаешь в этой же строчке.
Ключевое слово let тут применяется только к a

Худший ответ: Ты присваиваешь локальной переменной a ссылку на глобальное свойство window.b, которое создаешь в этой же строчке.
Ключевое слово let тут применяется только к a
Вопрос: Почему в Украине все работадатели оформляют работникам ИП?

Лучший ответ: Перевод гражданина в категорию ИП и заключение с этим ИП договора подряда означает то, что этот гражданин полностью выводится из поля трудового законодательства.
Берете трудовой кодекс (не важно Украины или РФ), читаете его, потом понимаете, что вот этих всех прав и гарантий вам не видать и выкидываете его. 
Также вам не видать первоочередной выплаты денег в определенных случаях, сертификации рабочих мест и прочего важного и полезного.

Худший ответ: Больничные, отпускные - за ваш счет.Можно штрафовать по жуткому - так как это будет контракт с фирмой-исполнителем, а не трудовые отношения.Можно отсудить назад деньги по "невыполненному или некачественно выполненному контракту".Проще бухгалтерия для плательщика (но усложняется для исполнителя).
Вопрос: Вывести переменную из JS в php?

Лучший ответ: а как вы получаете остальные данные в php, которые работают? Ответив на этот вопрос, я уверен, вы ответите и на вопрос как получить нужную вам переменную. Я знаю только два способа отправить какие-либо данные на php: 1) через html-тег <form> и 2) через js ajax'ом.
По сути вы скинули бесполезный код, и упрятали самое важное: как вы передаёте данные, что одни данные приходят, а другие нет.

Худший ответ: весь день гуглюПервый результат по запросу переменную из JS в php
в котором четко и просто написано "JavaScript выполняется на стороне пользователя, а PHP на стороне сервера, то значение не может быть передано напрямую" 
И ниже три способа как работать с данными.
Что именно у вас не получается? Каким образом вы хотите получить переменную valueFromUiSlider в суперглобальном массиве $_POST если вы ее туда не записали?
Вопрос: PHP 7 — можно ли узнать название класса из функции в котором она была выполнена?

Лучший ответ: В общем виде всю цепочку вызова можно получить с помощью debug-backtrace
https://www.php.net/manual/en/function.debug-backt...
В принцпие, очень странная ситуация когда вы вызываете функцию из глобального пространства имен и там вам необходимо источник вызова. Можете более подробно описать задачу, которую вы хотите решить таким способом?
PS Если функция будет анонимной или название класса вам нужно в функции X->index, то все гораздо проще:class X {
   function index() {
    var_dump(__CLASS__); // X
    $a = function() { 
        var_dump(__CLASS__); // X
    };
    $a();
   }
}

Худший ответ: __CLASS__ содержит имя класса в котором вызывается
Вопрос: Border-radius для блока?

Лучший ответ: .slider{
  border-radius: 10px; 
}
.slider__item{
  border-radius: inherit;
}
Родитель скруглёвывается.
А слайд наследует тот же border-radius.

Ну, или я всё неправильно понял.

Худший ответ: Убрать background-color у родителя?
Вопрос: ЧТо делает провайдер, когда устанавливает нам скорость интернета?

Лучший ответ: провайдер считает количество трафика, передаваемого вам и от вас. всё, что превышает установленную для тарифа скорость - "дропается", пакеты отбрасываются и не доходят до получателя.
обычный древний LAN кабель с 4 жилами позволяет установить скорость до 100 мбит/с (12 МБайт/c)
если подключены все 8 жил, то до 1 Гбит/с (120 Мбайт/c)

Худший ответ: Скажите, что делает провайдер, когда мы увеличиваем свой тарифный план и его скорость?Он меняет настройки шейпера.
Шейпер это такая штука которая ограничивает вам скорость - пока ваша скорость ниже, он ничего не делает, если ваша скорость начинает превышать скорость указанную в тарифе, шейпер просто уничтожает отправленные вами пакеты.
Вот и все.
Больше провадеру ничего делать не надо.
Кабель никакого отношения к тарифу не имеет - там уж сколько пройдет. Все зависит от того, какой у вас кабель.
Как правило кабель подключен к 100мегабитному порту - и его предел это 100 мегабит, может меньше, но не больше 100.
Редко бывает витая пара подключенная к гигабитному порту.
Оптика как правило может пропустить до несольких гигабит.
Вопрос: Когда язык может стать узким местом?

Лучший ответ: Во-первых, язык влияет на производительность программистов, а не программ. Узким местом может стать платформа, в вашем случае виртуальная машина CPython. Но при разработке сетевого ПО в целом и web-приложений в частности главный тормоз - это ввод/вывод. Издержки на него на порядки превосходят издержки на интерпретацию, так что последняя практически не влияет на производительность. В то же время CPython хорошо справляется с вводом/выводом с помощью Asyncio и способен решать проблему c10k.
Во-вторых, это зависит от того, что именно делают ваши микросервисы с каждым запросом. Например, для обычного интернет-магазина на очень синхронном Django 300 rps - это вполне обычная нагрузка, о которой не стоит беспокоится, если в команде разработчиков нет умственно отсталых и криворуких.

Худший ответ: Для начала в Гугле можно набрать python vs go slant
Далее, почему Go, а не Erlang, например? Обычно выбор конкретного инструмента зависит от конкретной задачи. Так что в вопросе не лишним было бы описать (хотя бы внутри спойлера), что за проект, на что акцент и т.д., если это не секрет, конечно.
Вопрос: Как создать сайт а именно сайт для интернет маркета?

Лучший ответ: Есть куча cms для магазинов, например OpenCart или его сборка сразу на русском и с необходимыми модулями - OcStore. Шаблоны можно приобрести на themeforest

Худший ответ: Могу подсказать следующие решения для вашего сайта:
Хостинг: стоимостью - 70 центов за месяц.
Домен ru: 321 рубля на год
Из платформы поинтересуйтесь prestashop.
Вопрос: Какой ноутбук взять для веб разработки + ИБ?

Лучший ответ: Apple самый удобный и долгоживущий, но играть на нем проблематично.

Худший ответ: использую Dell Latitude 5480 (i5-7440HQ, 32GB, 930MX), доволен как слон.
было две проблемки:
- клавиатура (тактильный джойстик в одно направление медленнее работал, и доп клавиши мыши просели)
- писк из корпуса (под нагрузкой из корпуса доносился писк с разной частотой)
обратился в службу поддержки, объяснил, приняли заявку, взяли данные.
итог:
- через 4 дня приехал домой инженер (Санкт-Петербург)
- за 40 минут заменил материнскую плату и блок клавиатуры
- уехал
от инженера узнал, что его сосед в офисе занимается MSI и при ремонте очередного ноутбука ругается как сапожник.
от себя про MSI: пришлось оказать помощь человеку с мелким ремонтом ноутбука GE70, что бы его полностью разобрать пришлось снимать систему охлаждения, под трубками был один винт, клавиатура с завода была приклеена на двухсторонний скотч очень хорошего качества, клавиатура снималась с трех этажным матом.
Вопрос: Как реализовать АдминПанель в блоге на RAILS??

Лучший ответ: Самый простой вариант это HTTP Basic authentication

Худший ответ: Еще один простой способ это использовать гемы rails_admin или activeadmin
Вопрос: Работа на Upwork в статусе самозанятого. Реально или нет?

Лучший ответ: Кто-нибудь практически по такой схеме пытался работать? На имя кого в итоге выставляли чек? 
Ещё двух месяцев не прошло. Не ищите, кто и что применял. Налогоплательщик - Вы, и ссылки на Васю, который так делал, никакого значения не имеют.Напишите запрос в Минфин или ФНС, это бесплатно. Можно электронно, на сайтеЯ сам закон подробно не читал. Но вот на хабре наткнулся на следующую статью, где обсуждается этот вопрос: https://habr.com/ru/post/431588/ 
И в коментах люди пришли к выводу, что ограничений по иностранным заказчикам вроде нет:
Почему Вы про меня говорите "люди"? :)))
Это моё мнение. Никаких выводов быть просто не может. Я эту статью написала за месяц до вступления закона в силу. Специально, чтобы хотя бы основные моменты рассказать. Сейчас практика ещё не сформировать, Минфин и ФНС только-только начали официальные разъяснения давать по общим моментам.

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

Лучший ответ: Ну если топорно что ад - таксономия. Город в метку и вот вам архив города - разное содержимое.

Худший ответ: Рассмотрите использование бесплатного плагина WT Geotargeting. С его помощью можно реализовать на сайте выбор города и отображение различной информации с привязкой к городу. В плагине предусмотрены шорткоды и функции. 

Если понадобится реализовать поддомены для городов, с единой панелью администратора (не мультисайт), то стоит рассмотреть расширенную платную версию плагина WT Geotargeting Pro, с возможностями которой можете ознакомиться на официальном сайте.
Вопрос: Можно ли верстать со смартфона?

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

Худший ответ: Можно. Так же как и можно кушать топором будучи подвешенным вверх ногами. А смысл? Если есть более удобные варианты? Я уже молчу про то, что под мобилки вряд ли есть адекватные IDE.
Вопрос: Просьба помочь с git`ом?

Лучший ответ: С английским совсем плохо? Неужели первый раз такое, что надо сначала скачать все изменения (pull) ветки, а потом в нее пушить?

Худший ответ: Не нужно делать комиты в ветку мастер. Создай ветку девелопер, и туда делай комиты. После делай Pull Request master < developer и мерж ветки через github в свой master. И как я уже понял, у тебя локальная ветка master отстает от ветки master в github репе.  По этому тебе нужно скачать все изменения. Также не игнорь совет выше. Напрямую в master в всех нормальных проектах делают только первый комит, потом всё делают через PR.
Вопрос: Как сверстать под неизвестный размер монитора?

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

"через вычисление скриптом размеров рабочей области" - что?
Просто задаёте максимальную ширину контейнера, саму ширину в 100%, центруете, задаёте небольшой padding - вот вам контейнер под любой размер монитора.

Если совсем не понимаете, попробуйте использовать заготовку от какого-нибудь бутстрапа.

Успехов!

Худший ответ: Можно уткнуться в Bootstrap
Вопрос: Почему функция console.log зависит от функции return?

Лучший ответ: Учи области видимости в языке. Если книжка не может объяснить, то прочитай тут: https://habr.com/ru/company/ruvds/blog/337038/
или тут: https://learn.javascript.ru/functions-closures
или тут: https://getinstance.info/articles/javascript/varia...
В твоем случае balance, amount в функции это локальные переменные, они не имею отношения к глобальным, имя не имеет значение, и то что оно одинаковое путает тебя.

Худший ответ: Мне тут еще подсказали по моему вопросу и ://declare variable;
    var balance = 10500;
    var cameraOn = true;
    var amount = steal(balance, 1250);
    //function;
    function steal(balance, amount) {
        cameraOn = false;
        if (amount < balance) {
            balance = balance - amount;
        }
        return balance; // 
    }

    console.log(amount);Возвращаемое значение функции присваивается переменной amount!!!!!!!!Вот теперь я понял почему при смене return balance на return amount будут разные значения!!!!
Вопрос: Где можно найти и посмотреть «хорошие практики» на React?

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

Худший ответ: Frontendmasters
Там есть толковые курсы по реакту
Вопрос: Как передать параметр из вложенной функции?

Лучший ответ: почитайте про асинхронность в JavaScript
на момент, когда запрос выполнится, и вызовется success, return flag; уже давно отработает 
можно передавать callback в функциюfunction query(data, mid, elem, callback) {
  $.ajax({
    /* ... */
    success: function (server_response) {
      /* ... */
      if (data.status) {
        status(true, data.msg)
        callback(true);
      } else {
        status(false, data.msg)
        callback(false);
      }

    },
    error: function (err, texterr) {
      status(false, 'error_ajax' + texterr)
    }
  });
}


query(data, mid, elem, (flag) => {
  console.log(flag);
});
можно промисом function query(data, mid, elem) {
  const executor = (resolve, reject) => {
    $.ajax({
      /* ... */
      success: function (server_response) {
        /* ... */
        if (data.status) {
          status(true, data.msg)
          resolve(true);
        } else {
          status(false, data.msg)
          resolve(false);
        }
  
      },
      error: function (err, texterr) {
        status(false, 'error_ajax' + texterr)
        reject();
      }
    }); 
  };
  
  return new Promise(executor);
}


query(data, mid, elem).then((flag) => {
  console.log(flag);
});
если хочется асинхронный код писать синхронно, то можно воспользоваться промисами и async/await(async () => {
  const flag = await query(data, mid, elem); 
  console.log(flag);
})();

Худший ответ: Вы делаете асинхронный запрос.
Самое простое решение - добавить async: false в параметры ajax. Но гораздо лучше разобраться в этом вопросе и понимать, что вы делаете и зачем оно вам надо.
Вопрос: Какую выбрать CMS/CMF для интернет магазина с оптовыми опциями?

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

Худший ответ: Делайте на MODX однозначно.
Ставите MODX+pdoTools+Minishop2+msSalePrice(490 руб.)
Последний как раз добавит вам оптовые цены.
Вопрос: Какая графика используется в игровых движках?(вектор или растр.)И как вообще устроен графический редактор в них?

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

Худший ответ: Трёхмерная графика не бывает векторной и растровой. У неё там свои разновидности, и там она используется полигональная. Текстуры, разумеется, растровые. Существуют псевдовекторные элементы вроде поля расстояний, но это именно что «псевдо-».
Двухмерная — в подавляющем большинстве случаев растровая, но и векторные элементы бывают.
Вопрос: Почему компилятор ругается?

Лучший ответ: По стандарту Си он вычисляется как logical-OR-expression ? expression : conditional-expression - это означает, что второй операнд может быть любым выражением(даже применять оператор ,), а третий операнд подчиняется логике приоритета и должен быть выше или равен по сравнению с тернарным оператором. В данном случае это вычисляется как ((ch == 'h') ? (high = guess) : low) = guess. Оператор ?: возвращает временное значение, и компилятор говорит об этом.

Худший ответ: По стандарту Си он вычисляется как logical-OR-expression ? expression : conditional-expression - это означает, что второй операнд может быть любым выражением(даже применять оператор ,), а третий операнд подчиняется логике приоритета и должен быть выше или равен по сравнению с тернарным оператором. В данном случае это вычисляется как ((ch == 'h') ? (high = guess) : low) = guess. Оператор ?: возвращает временное значение, и компилятор говорит об этом.
Вопрос: Как контролировать статус выполнения консольной команды в Symfony?

Лучший ответ: Команду вы никак не "дёрнете". Но вы можете хранить её статус в каком-нибудь доступном вебу хранилище - например, Redis.
А если нужно совсем реалтайм - можно через очереди (RabbitMQ, beanstalkd) посылать из команды сообщения серверу вебсокета, который будет уже отдавать статус на фронтенд.

Худший ответ: В итоге, остановился на вот таком решении - Amazon SQS + https://github.com/dunglas/mercure
Вопрос: Сайт бесплатно и навсегда?

Лучший ответ: Вечного и бесплатного не бывает.
Пилите на том, что сейчас актуально (github pages, google sites, ucoz). 
Бесплатных доменов не бывает, только поддомены (.googlesites.com, .ucoz.ru и тд).
Ранее были бесплатные домены .spb.ru, .msk.ru, но теперь они по цене как .ru
Технологии и сервисы будут меняться примерно в рамках 5-8 лет. 
Текущий формат хостингов умрет примерно через это время, может всё превратится в контейнеризацию (таскай свой контейнер 1мбайт по сервисам в пару кликов).

Худший ответ: Это из области фантастики. Кто-то всегда должен заниматься поддержкой.
Причиной послужил один сайт с очень классной и проф.информацией узкой специализации, который вел один знакомый, который... умер.
Договариваемся с хостером, регистратором и переделываем лицевые счета.
ps. Нахер ты кому нужен со своим сайтом? Задумайся.
Вопрос: Что выбрать? Kotlin или Flutter?

Лучший ответ: Вот и начались КАНИКУЛЫ у школьников на самоизоляции, они не могут гулять, так о будущем все думают. Какая ось заменит Android через N лет? А стать ли мне хакером и на какой для этого паблик подписаться? А что если я и гейм- и веб-разработчиком буду одновременно?

Учить нужно то что актуально сейчас. Пока что это котлин. А после того как выучите котлин и поймете как все работает вам уже будет не трудно и в случае ухода его на второй план выучить Flutter

Худший ответ: Flutter перспективнее тк можно ещё на ios, с kotlin вы завязаны на 1 платформу, рынок сейчас такой что всем нужно сразу 2 приложения android+ios, заказчик между kotlin и Flutter сделает выбор в пользу последнего.
Вопрос: Есть Wi-Fi роутер с автоматическим переключением между WAN и 4G?

Лучший ответ: Классический ответ - Mikrotik.
Однако, у них LTE  с симкартой - только у wifi точек доступа есть. Во всех остальных роутерах usb-разъем.
Так же, роутеры сложно настроить неподготовленному человеку

Худший ответ: Ростелекомовский Sagem умеет. В 2011 году брал у них в аренду. До сих пор работает.
 Я думаю любой способен использовать 3G как резервный канал.
Поищите интерфейс интересующего роутера. Там будет понятно.
Вопрос: На мой сайт заходят другие сайты — это как?

Лучший ответ: Там поставили на вас ссылку, возможно в виде oEmbed.

Худший ответ: Ситуации могут быть разные...
1) Например, кто-то опубликовал ссылку на картинку  с вашего сайта на своем сайте. И при посещении таких страниц будет "страдать" ваш сервер. Для этого включите защиту от hotlink
2) Кто-то действительно поставил ссылку на ваш сайт и люди перешли на ваш сайт с него (реферреры)
3) Как отметил Игорь Воротнёв, кто-то добавил oEmbed 
и т.д. и т.п.
Вопрос: Как хотсер видит Onion (TOR) траффик?

Лучший ответ: Как хотсер видит Onion (TOR) траффик? Ну во первых хостер ничего не видит, пока не залезет в логи, или не настроит онлайн мониторинг вашего трафика.
Во вторых он видит откуда к вам ходит трафик и куда вы его отправляете,  IP адрес и порт, так же он видит объем и время передачи трафика. Может даже попытаться определить тип трафика но не гарантированно.
Больше ничего не видит, да и не надо ему больше.
Хотя если у него возникнет желание разобраться и проанализировать - он без особых усилий определит что адрес с которым вы активно обмениваетесь трафиком является выходной нодой TOR.

Худший ответ: Если речь о hidden-сервисе, то хостер не видит ничего, кроме множества разных открытых зашифрованных TLS-соединений, которые не может идентифицировать или связать непосредственно с тором. Внешне, это постоянно сменяющиеся коннекты с разным объёмом трафика от разных адресов (внутренних мостов), через которые пользователи посещают сайт.
В трафике к hidden-сервисам, tor exit ноды не участвуют. Все соединения остаются в пределах сети тор.
Единственное, что может видеть хостер, это сам факт первичного подключения сервера к тору, т.к. клиенты тор совершают хэндшейк по общему паттерну. Этого можно избежать при использовании pluggable transports и обфускации, но в этом случае хостер будет видеть постоянный нестандартный трафик, хотя сам по себе этот факт обычно не нарушает ничей ToS.
В теории, в серьёзных расследованиях место размещения может быть выявлено через косвенную информацию: сотрудничество с хостерами, общесетевой DPI на территории размещения, косвенные данные о трафике, человеческие ошибки операторов ресурса.
Вопрос: Как выводить и записывать значения в mysql через запятую или |?

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

Худший ответ: UPDATE `class_users` SET `нужная строка` = CONCAT(`нужная строка`, ',123')

Так же есть функция FIND_IN_SET() которая позволяет искать значение в строке разделённой запятыми, чтобы не прибегать к использованию LIKE '%...%'

Как уже ответили ранее, подобные трюки являются анти-шаблонами. 
Я считаю что допустимо подобный подход использовать чтобы компактно хранить список чего-то (денормализация). Но если вы потом по значениям из списка захотите что-то искать или фильтровать, то это всегда будет FULL SCAN запрос, который в 999999999 раз будет медленнее и грузовее для CPU нежели если бы вы хранили основную запись и связанные списки отдельно, так как во втором случае возможно эффективно использовать индексы для поиска.
Вопрос: Как сделать красивую фильтрацию?

Лучший ответ: Вот интересная библиотека

Худший ответ: https://codepen.io/topicstarter/pen/odjrpa  46 раз показываю