pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: Мультиплеер для уже созданой игры?

Лучший ответ: Если все самому делать, то нужно быть знакомым с методами отладки и архитектурными шаблонами многопоточных приложений; четко понимать архитектуру игровых движков - потому что её нужно будет ломать и пересобирать для мультиплеера, даже если это splitscreen / hotseat; сечь в сетевом взаимодействии: и интерфейсы, и устройство библиотек (на C); C/C++ и Java interop. 
Ну, и конечно же, методики борьбы с сетевыми задержками, реконнектами. 

Если организация мультиплеера централизованная, то дополнительно надо бы мета-гейм оформить, методики организации античитов, определиться с алгоритмом подбора, выработать стратегию горизонтального масштабирования, разбираться в Kubernetes и кластерищации БД.

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

Худший ответ: Тут несколько вариантов.
1) Самый простой, но он может не сработать. Попросить у разработчиков исходники, объяснив причину. И если они согласятся, то уже делать мультиплеер, исходя из исходников, там и будет понятно какой язык использовать, технологии и всё остальное.
2) Можно расковырять игру на ресурсы, графику(текстуры, модельки, анимацию), звуки и т.д. или купить/заказать похожие и на том же юнити/UE4 написать аналогичную игру с похожей/аналогичной графикой и геймплеем. А после сделать мультиплеер. Тут вы уже написали, что нашли даже статьи на эту тему.
3) Декомпилировать/модифицировать игру. Но тут надо искать, что есть для модов и есть ли вообще. Вариант, от среднего до очень сложный, т.к. подразумевает объемные знания, если конечно игра не заточена для модификаций, если заточена и есть инструменты, то уже проще. Тут надо искать в гугле, конкретно по этой игре и модам.
Предлагаю сначала поискать по модам к данной игре и информации по модостроительству к ней. Если этого нет или мало, то тогда можно рассмотреть другие варианты.
Вопрос: Ужасная ли реализация разметки?

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

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

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

Худший ответ: А автор чужого сайта дал своё согласие?
Вопрос: Создаем базу данных запчастей в 2020 году. С чего начать?

Лучший ответ: Забудьте про Wordpress и подобные поделия.
Насколько помню в CS-Cart есть конфигуратор, который наверняка пригодится. Был раньше в демо на примере сборки компьютера. По совместимости комплектующих.
Собственно CS-Cart сейчас самое оптимальное решение для приличного каталога или магазина.

Худший ответ: 
Берете любую Headless CMS/API, например Directus(MySQL) или Hasura(PostgreSQL), делаете в ней структуру базы через удобную админку.
Пишете адаптер для складских программ 1C и Мой склад для автоматического наполнения полученной базы через API.
Открываете бутылочку "Chivas Regal" и распиваете с коллегами.


При данном подходе вам будет абсолютно все равно каким способом выводить данные из базы - хоть на сайте Wordpress, хоть на настольном приложении на Electron, хоть на статическом сайте через Vue.
Вопрос: Насколько хорошо backend разработчик должен разбираться в Linux?

Лучший ответ: Собирать из исходников нужно в очень редких случаях, на столько редких, что знать как это делается вообще не нужно. Так что можно смело отмести этот навык.
Надо:
Знать где какие логи есть и уметь их читать, решать ошибки.
Всякие банальные вещи, типа запуск/перезапуск демона, убить процесс, уметь читать баш-скрипты и чуть-чуть писать (на уровне что-то подправить и чтобы не поломать всё к чертям)
Для бекендера надо уметь устанавливать и настраивать тот софт с которым работаешь: nginx, apache, mysql, postgres, redis, mongodb и так далее.
Vim можно вообще не знать, в *nix обычно есть редактор проще, типа nano, joe или вообще mcedit.
Самое главное - научиться выходить из vim прежде чем испортишь файл ;-)
Если работаешь с языком, у которого есть свой пакетный менеджер (npm, yarn, pip) нужно уметь установить его и разруливать ошибки при установке через эти пакетные менеджеры. 
Например для python-pip требуются установленные компилятор и заголовочные файлы питона. Имею ввиду, что такие тонкости надо знать.
ssh само собой надо уметь настраивать, генерация ключей, настройка авторизации по ключу, копирование файлов scp.
git настраивать bare-репозитории чтобы заливать на сервер и там же разворачивать, при работе без сторонних сервисов типа github, bitbucket.

Худший ответ: Должен уметь настроить окружение для своего приложение.
Вопрос: Как принять JSON в POST запросе на PHP?

Лучший ответ: Ну в $_POST, наверное какое то поле должно быть.
Или$s = json_decode(file_get_contents('php://input'));
upd: Интересно почитать по теме

Худший ответ: Вывод var_dump($_POST); в студию
Вопрос: C#. Как сохранить информацию между формами Windows Form?

Лучший ответ: Вариантов полно:
1. Передать ссылку на экзепляр класса основного окна формы, через конструктор при создании другого окна.
2. Передать делегат на функцию, также через конструктор
3. В классе зависимого окна создать event и подписаться на него после создания.
и т.д.

Худший ответ: https://docs.microsoft.com/ru-ru/dotnet/api/system...
Открывайте новую форму через диалог. После закрытия у вас будет результат. 
Кроме этого используйте Глобальный объект с состояниями,  а в формах только меняйте его свойства.
Вопрос: Как обойти капчу на Python?

Лучший ответ: Если у вас возникла такая-же проблема как у меня, а именно капча при парсинге сайта, то прочитайте как я её решил.

Изначально я использовал библиотеки requests (для отправки запросов к сайту) и bs4 (для самого парсинга).
Сначала я сделал задержку, если программа встречает капчу, то она останавливает свою работу на 1 час, и дальше продолжает работать. Это не сработало, ни через час, ни через два, ни через 3 дня.
Дальше я думал подключить selenium, и когда выходит капча, открывать эту страничку с помощью selenium, там проходить капчу вручную, закрывать selenium, и пробовать через requests еще раз отправлять запросы на страницу. Капча все равно осталась.
Переписать парсер под selenium - без использования requests и bs4, хорошее решение, но не всегда подходит. В моем случае было слишком муторно использовать это, поэтому я обратился сюда.
Тут мне подсказали такой вариант: использовать сессии (requests.Session()) и очищать куки при смене IP (кстати да, я подключал библиотеки для смены IP через proxy, а так же библиотека для генерации fake-User-Agent) и передавать в заголовки параметр referer. Возможно это и работает, но не для меня. Капча все равно осталась.

Ну и вот собственно само решение :)
Я решил заменить библиотеку requests на selenium. Я через него подключался к сайту (у меня даже открывалось окно браузера) и с помощью метода page_source я получал html-код странички. Кстати, будьте внимательными, я так понял что с помощью этого метода можно получить только html, без js и css. Поэтому если сайт использует js для генерации контента, то у вас вряд-ли это получится. А потом, я просто с помощью bs4 парсил полученную html страничку, и извлекал из нее нужные мне данные. Да, капча все равно появлялась, но она появилась лишь однажды, я её вручную решил прямо через окно selenium, и можно сказать что я обошел капчу, так как она больше в процессе парсинга у меня не выскакивала.

Можете попробовать все описанные выше способы, может что и поможет. С каждым сайтом нужно извращаться по своему)

Худший ответ: Какую задержку используете?
По делу:
В заголовках передавайте referrer. Если вы используете requests.session(), тогда сбрасывайте cookies при смене ip.
Вопрос: Как реализовать Drag and drop из iframe в страницу?

Лучший ответ: Никак. Это XSS. Он запрещён в целях безопасности.

Худший ответ: Никак, через iframe вообще никак нельзя получить данные с другой страницы. Чтобы не воровали пароли сделано.
Вопрос: Почему в Python элементы списков нумеруются начиная с 0?

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

Худший ответ: Так велел делать один из отцов-основателей. Умные послушались, остальные придумали Lua, Julia и прочие поделки.
Вопрос: Как через flexbox прижать последний элемент к правому краю, а остальные оставить посередине?

Лучший ответ: Для логинаmargin-left: auto;

Худший ответ: Для логинаmargin-left: auto;
Вопрос: Как правильно получать данные с input в form?

Лучший ответ: Если вы сделали просто action="...php" (и не указали method="get | post"), то вы мало того что перейдёте на другую страницу, у вас в адресной строке появится ряд параметров вроде:
site.ru/form_result.php?name1=1&name2=str
где name1 и name2 - именя инпутов в вашей форме.
Так вот, смысл в том, что ваша страница form_result.php должна обработать GET параметры (name1=1 и name2=str), в процессе, возможно записав что-то в базу данных.
А уже из БД вы выгрузите в удобном вам формате.
Ну или сразу php должен создать csv/xls, но тут надо ещё смотреть как файлы создавать/изменять.
Посмотрите php.net/manual/ru/tutorial.forms.php

Худший ответ: Гуглить в по запросу: jquery ajax contact form
Вопрос: Можно ли использовать selenium на python без графической оболочки на linux?

Лучший ответ: Я использую Xvfb в связке с pyvirtualdisplay для python.
Пример использования:
from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 600))
display.start()
# здесь запускаете webdriver и делаете всё необходимое
display.stop()
800, 600 - разрешение виртуального экрана, так же можно указывать глубину цвета и другие параметры.

Худший ответ: selenium + headlessк примеру вот так
Вопрос: Кэширование результата vs постоянный пересчёт того же самого?

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

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

Лучший ответ: Так сгодится?snippet

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

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

Худший ответ: Да, и знайте, что это их ни к чему не обязывает)) Если они не захотят вас "светить", то и не станут, переубедить не всегда получается, сам бъюсь про портфолио и вот это все.
Вопрос: Вставка в echo html + php?

Лучший ответ: <? //тут пых ?>
<!--тут хтмл-->
<? //тут тоже пых ?>

// или так

<?
//тут пых
?>
<!--тут хтмл-->
<?
//тут пых
?>

Худший ответ: Самое простое как по мне:<?php if ( is_user_logged_in() ) { ?>
<div class="all">  Вы зареганы!</div>
  <div class="end1">
      <?php
          Код
       ?>
<?php } else { ?>

  <div class="all">Вы не зареганы!</div>
  <div class="end2">
      <?php
          Код
       ?>
<php } ?>
Вопрос: Как хранить/выводить всю переписку почты?

Лучший ответ: Через IMAP считываешь почту, потом отправляешь на фронтенд.

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

Лучший ответ: Практиковаться, читать умные книжки по алгоритмам и структурам данных. Вот берите например https://leetcode.com/ отсортируйте по сложности (с самых легких), и делайте-делайте. Но без теории алгоритмов будут костыли, поэтому лучше почитать что-то.

Худший ответ: Для того чтобы решить задачу нужно знать решения типовых задач - например чтобы сформировать дерево нужно применить рекурсию по связи родитель-дочерний. Входные данные это двумерный массиив 1 измерение это элементы, 2 измерения это свойства элементов. Выборка происходит по свойствам элемента. На каждую выборку 1 элемента происходит новый поиск элементов - рекурсия.
Таким образом решение задачи сводится к ее классификации и применении типового шаблона решения на конкретную задачу. Типовые шаблоны решений это и есть алгоритмы. 
Знаешь все алгоритмы - умеешь решать все задачи.
Если задача большая - то она делится на подзадачи.
Вопрос: Книги для новичка(для совсем новичка) Python?

Лучший ответ: Доусон М. Программируем на Python
Прохорёнок, Дронов - Python 3. Самое необходимое. 2-е изд
Рамальо Лучано - Python. К вершинам мастерства
Свейгарт Э. Автоматизация рутинных задач с помощью Python
Чан Уэсли Дж. Python. Cоздание приложений
варезные сссылки тут запрещены, так что сами поищите
на https://www.twirpx.com (через VPN)
А вообще лучше начинать с курсов с изучения онлайн, есть много доступных уроков
https://pythontutor.ru вот это обязательно, пошагово протаскивают в теории с примерами и практикой
https://pythonworld.ru/samouchitel-python
https://metanit.com/python/tutorial/1.1.php
https://habr.com/ru/post/319164/
https://habr.com/ru/company/mailru/blog/454324/
https://younglinux.info/python

Худший ответ: Программирование на Python ( Марк Лутц )
Простой Python. Современный стиль программирования ( Любанович Билл )
Python. Карманный справочник ( Марк Лутц )
Изучение сложных систем с помощью Python ( Аллен Б. Дауни )
Приемы объектно-орентированного проектирования. Паттерны проектирования ( Гамма Эрих, Джонсон Р., Хелм Ричард, Влиссидес Джон-Питер )
Совершенный код. Мастер-класс ( Стив Макконнел )
Вопрос: Что выбрать Aiohttp или Sanic?

Лучший ответ: Выбирать всегда сложно. 
Если критерием является скорость, то вот сравнениеstarlette - разрабатывает Tom Christie. Реально крутой разработчик, автор, в том числе и Django Rest Framework. Быстро, мощно, хорошо документировано. 
aiohttp проигрывает почти в 2-3 раза
Посмотри, что ещё под asyncio есть
Сравнение с sanic по скорости я не нашёл.
В любом случае лучше попробовать всё на простом примере и для себя определиться, что проще/лучше/быстрее/расширяемее...
Возьми простой пример и повтори его на starlette и sanic. И сравни результат и свои ощущения...

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

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

Худший ответ: Мне кажется, что вот эта статья может вам помочь (проверка графа на планарность): https://ru.m.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE...
Пересечением в вашем случае является совпадение переходов из вершины A в вершину B.
Вопрос: Достаточно ли отключить вайфай, чтобы рекламные системы на улицах не собирали мой мак-адрес?

Лучший ответ: Если вы имеете в виду WiFi мак-адрес, то да, достаточно.
Но ещё есть, например, Bluetooth мак-адрес. Хотя, кому он нужен?
Да и кому вы нужны?
Вас реально таргетнули по мак-адресу и предложили рекламу?

Худший ответ: У Android телефонов в настройках есть галочка "Искать WiFi сети даже при отключенном WiFi", а так же "Геопозиционирование по WiFi сетям". Их следут так же отключить.
Вопрос: Как сделать жирный шрифт в Telegram боте?

Лучший ответ: Вот для примера фрагмент кода:def test_send_message_with_markdown(self):
    tb = telebot.TeleBot(TOKEN)
    markdown = """
    *bold text*
    _italic text_
    [text](URL)
    """
    ret_msg = tb.send_message(CHAT_ID, markdown, parse_mode="Markdown")
    assert ret_msg.message_idbot.send_message(CHAT_ID, "*Здесь должен быть жирный шрифт*", parse_mode= "Markdown")

Худший ответ: Не знаю как в telebot, но в aiogram картина выглядит следующим образом:

async def command_start(message: types.Message):
    await bot.send_message(message.from_user.id, text='<b>Какой-то текст...</b>', parse_mode='HTML')

С Markdown примерно такая же история, просто вместо HTML подставляешь его.
Вопрос: Правильно ли изучать все и сразу?

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

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

Лучший ответ: Для решения воспользуйтесь инструментом "мозг" . По вопросу приобретения мозга обращайтесь к богу с молитвами (спойлер - не поможет).

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

Лучший ответ: одинаковый padding-bottom для трех блоков и {margin-top: auto; margin-bottom:0} для дивов внутри этих трех блоков

Худший ответ: .block {
   display: flex;
   flex-direction: column;
   justify-content: flex-end;
   padding-bottom: /*Нужное значение отступа*/
}
Вопрос: Как сделать изогнутую линию с стрелками?

Лучший ответ: В качестве идеи:snippet

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

Лучший ответ: Здравствуйте!
У вас случайно плагин Fastest Cache не установлен?))) В этом плагине есть пункт "кэшировать сайт" и "не кэшировать сайт для админов и авторизованных пользователей". Вот, вы заходите на сайт и видите не кэшированную версию, выходите и видите кэшированную версию. В общем - чистите кэш плагина. Ищите плагины:
fastest cache, w3 total cache, ninja pagespeed, wp rocket etc. 
P.S. не путайте с кэшем браузера
P.P.S. один из моих клиентов как-то умудрился важные правки закэшировать и каждый раз при чистке кэша терял свои данные и жаловался, что сайт криво работает)))

Худший ответ: Здравствуйте!
У вас случайно плагин Fastest Cache не установлен?))) В этом плагине есть пункт "кэшировать сайт" и "не кэшировать сайт для админов и авторизованных пользователей". Вот, вы заходите на сайт и видите не кэшированную версию, выходите и видите кэшированную версию. В общем - чистите кэш плагина. Ищите плагины:
fastest cache, w3 total cache, ninja pagespeed, wp rocket etc. 
P.S. не путайте с кэшем браузера
P.P.S. один из моих клиентов как-то умудрился важные правки закэшировать и каждый раз при чистке кэша терял свои данные и жаловался, что сайт криво работает)))
Вопрос: Какой длины пароль сейчас могут взломать?

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

Худший ответ: Всем большое спасибо за ответы!
Все оказалось просто, но неожиданно. Намедни, я установил несколько твиттер клиентов (искал подходящий для себя) из (!) AppStore. Не откуда нибудь с сайта скачал, а именно из AppStore. Похоже одна из программ, продает эти данные рекламодателям, либо сами владельцы - арбитражники, которым главное где-нибудь распространить свои ссылки.
Не думал, что в AppStore могут попадать такие приложения, поэтому даже сразу и не понял откуда ноги растут. Других вариантов нет, т.к. весьма осторожен в сети, фишинговые сайты распознаю, трояны для MacOS исключен, также как и аддоны (тогда бы увели все пароли, а не один замухрышный твиттер), не качаю ничего пиратского, не оставляю пароли на рабочем столе(все зашифровано в менеджере паролей), социально инженирингово никто пароль у меня не выпытывал и т.п.
В общем методом исключения, пришел к выводу, что это одно из бесплатных клиентов из AppStore.
Вопрос: Как сделать по БЭМ?

Лучший ответ: на самом деле тут нет однозначно верного решения. их множество и все они могут быть правильными. для начала нужно посмотреть на этот кусок интрфейса и определиться, что тут может быть блоками. все зависит от степени переиспользуемости которая вам нужна. можно все одним блоком сделать или например выделить 4 блока:
контейнер<div class="container"></div>
тайтл<div class="title"></div>
превью работы<div class="project-preview">
    <div class="project-preview__image"></div>
  </div>
сама секция портфолио<div class="portfolio-section">
    <div class="portfolio-section__inner">
      <div class="portfolio-section__title"></div>
      <div class="portfolio-section__grid">
        <div class="portfolio-section__preview"></div>
        <div class="portfolio-section__preview"></div>
        <div class="portfolio-section__preview"></div>
        ...
      </div>
    </div>
  </div>
далее все это соединям вместе миксуя блоки на одной dom-ноде<div class="portfolio-section">
    <div class="portfolio-section__inner container">
      <div class="portfolio-section__title title">Портфолио</div>
      <div class="portfolio-section__grid">
        <div class="portfolio-section__preview project-preview">
          <div class="project-preview__image"></div>
        </div>
        <div class="portfolio-section__preview project-preview">
          <div class="project-preview__image"></div>
        </div>
        <div class="portfolio-section__preview project-preview">
          <div class="project-preview__image"></div>
        </div>
        <div class="portfolio-section__preview project-preview">
          <div class="project-preview__image"></div>
        </div>
      </div>
    </div>
  </div>

Худший ответ: <section class="section">
	<div class="wrapper section__inner">
		<h2 class="section__title">Портфолио</h2>
		<div class="portfolio section__content">
			<a class="portfolio__item" href="#">
				<img class="portfolio__img" src="/" alt="img">
			</a>
		</div>
	</div>
</section>
Вопрос: Почему так работает побитовый сдвиг?

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

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

Лучший ответ: Доки не забываем читать

Худший ответ: Жуть какая-то(((