pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: Как задать отображение spinner до ответа от сервера reactJS?

Лучший ответ: Идеальный вариант, создать для этих задач компонент:function Block({ 
  children,
  isLoading, 
  isError, 
  isEmpty, 
  emptyText, 
  fetch,
}) {
  const showPreloader = isLoading && !isError;
  const allDataIsReady = !isLoading && !isError;
  const showEmptyText = allDataIsReady && isEmpty && emptyText;

  return (
    <Wrapper>
      {showPreloader && <Preloader />}
      {isError && <TryAgain fetch={fetch} />}
      {showEmptyText && <Empty>{emptyText}</Empty>}
      {allDataIsReady && children}
    </Wrapper>
  );
}
И использовать его в коде так:render() {
  const { isLoading, isError, orderList } = this.props;

  return (
    <Block
      isLoading={isLoading}
      isError={isError}
      isEmpty={!ordersList.length}
      fetch={this.fetchOrdersList}
      emptyText="You don't have any orders."
    >
      {ordersList.map(order => <Order key={order.id} order={order} />}
    </Block>
  )
}
Название служебных дочерних компонентов компонента Block условные, но думаю суть их задач передают.

Худший ответ: Мое мнение такое:
1. То что спиннер почти не заметно - это нормально раз сервер быстро ответил и рендер тоже прошел нормально.
2. Насчет "скачков", отрисовки с нуля и вообще выборки фильмов - посмотрите на библиотеку reselect, попробуйте её (если еще не используете), очень помогает во многих подобных (и не только) случаях.
3. Насчет ошибки со стороны сервера - я бы добавил, это удобно, и делается не трудно.
Вопрос: Как настроить бота в вк через Callback API?

Лучший ответ: SSL обязателен, причем не самоподписной.
Для проверки разделите задачу на две части:
1) Прием сообщения от ВК, оно приходит без ключей, на указанный вами адрес вебхука.
$IN = json_decode(file_get_contents('php://input'), TRUE);
Сохраните приходящий массив, посмотрите, что в нем.
2) Отправка сообщения.
  $request_params = array(
      'message' => $OUT['MSG'],
      'user_id' => $IN['FROM_ID'],
      'access_token' => $token,
      'v' => '5.63'
    );
$get_params = http_build_query($request_params);
$log = file_get_contents('https://api.vk.com/method/messages.send?'. $get_params);
// Сохраните значение $log, в нем будет ответ ВК и соответственно, можно будет посмотреть, что ему не нравится.
//Возвращаем "ok" серверу Callback API
echo('ok');
Если нужно помочь сохранять ответы или подробности, пишите.

Худший ответ: Ларчик просто открывался echo('ok');
Вопрос: Сравнение времени в строковых переменных на JS?

Лучший ответ: не решение. но намек на негоfunction timeToDate(time) {
    var chunks = time.split(':');
    var date = new Date();
    date.setHours(Number(chunks[0]));
    date.setMinutes(Number(chinks[1]));

    return date;
}
еще можно moment.js использовать.

Худший ответ: Ну суть такая: Создать одинаковые объекты даты, установить каждому требуемое время, посчитать дифф.
Топорный вариант без использования сторонних библиотек:var date1 =  new Date();
date1 = date1.setHours.apply(date1, "18:20".split(":"));
var date2 =  new Date();
date2 = date2.setHours.apply(date2, "20:21".split(":"));
var diff = date2 - date1;
Вопрос: Как ограничить скорость интернета?

Лучший ответ: Толкового выйдет мало, самым простым способом (но и требующим некоторых знаний) купить mikrotik младших серий, цена 600-700р, внутри возможность настроить как душе угодно.
Аналогично сижу на adsl и при upload пинг уходит в бесконечность. Проблему решил такой схемой
инет <-> D-Link DSL-2500U (pppoe) <-> Mikrotik hAP Lite (proxy, QoS, VPN, Wifi IoT) <-> Xiaomi WiFi3 ( перешит, базовая wifi ac)
Максимальная скорость на upload в 80% от канала, теперь пинг не скачет и упал до 10-15мс.
Еще можно уменьшить пинг ценой потери скорости download, путем смены adsl протокола

Худший ответ: Прошивка DD-Wrt
Если не поленитесь почитать, у вас все получится.
Вопрос: Какие службы используются и какие задачи выполняются при работе Postfix или Exim?

Лучший ответ: man postfix, man exim. Так же рекомендую почитать книжку "администрирование Postfix", есть перевод на русский. Там детально описывается какой процесс за что отвечает. Rtfm, в общем)

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

Лучший ответ: а) Вероятно, один из компонентов страницы не прогрузился до конца.
https://learn.javascript.ru/onload-ondomcontentloaded
Есть несколько разных обработчиков, и они срабатывают на разную полноту контента страницы.
На плоскости JQuery такое же разнообразие.
front-end.su/2016/02/12/load-events
б) if(!preloader.classList.contains('done'))
Хотите большую поддержку браузерами и с легкой руки используете свежие методы: classList.
Разработчик обязан страдать, применяя решения и используя более устаканенные методы, если хочет широкий охват поддержки браузерами:if(preloader.getAttribute('class').indexOf('done') == -1)
PS: Или не обязан, если подключить JQuery.)

Худший ответ: document.body.onload
вы так все события убиваете на странице, и с тем же успехом наоборот кто-то может перебить ваше.window.addEventListener("load", function(event) {
    console.log("All resources finished loading!");
  });
Вопрос: Что занимает наибольшую часть времени при разработке мобильных приложений?

Лучший ответ: 20% времени занимают все самые важные, полезные и интересные штуки. Остальные 80% - тестирование, верстка, оптимизация и прочие скучные рутинные занятия.

Худший ответ: Ты неправильно понял статью. Или статья неправильная. за 20% времени можно накидать основу, а 80% занимает доработка. Это касается как верстки  так и функционала. смешивать это не стоит. распределение в целом больше зависит от того что важнее логика или визуальная составляющая.
Вопрос: MySQL кеширует запросы даже при выключенном кешировании?

Лучший ответ: Это совсем не обязательно кэш.

Во-первых, при выполнении запроса MySQL подгружает в память все необходимые индексы. Если сразу после этого выполнить запрос повторно, индексы уже находятся в памяти, и это уменьшает время выполнения запроса.

Во-вторых, MySQL также на время кэширует план выполнения запроса.

как от этого избавиться?Я не думаю, что от этого стоит (или даже можно) избавляться. Вреда никакого, одна сплошная польза :)

Худший ответ: я когда-то задвался таким вопросом, и вроде как нашёл ответ, что встроенный кэш не выключается
Вопрос: Кавычки по стандартам HTML?

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

Худший ответ: Если голый HTML - неважно. Если у вас имеются вставки для какого-то серверного предпроцесинга - отталкивайтесь от него - если скажем у вас там требуется двойная кавычка для строковых переменных например - тогда в HTML удобней будет использовать одинарную и наоборот.
Вопрос: Почему Не срабатывает в margin top через @media?

Лучший ответ: Потому, что стоит переопределение@media only screen and (max-width: 767px)
.single-featured-image-header img {
    margin-top: -22px;
}
строка 569 файл responsive.css
Сделайте себе за правило. Если вы верстаете desktop-first (от большей версии к мобильной), то медиа запросы должны идти в порядке убывания, чтобы для маленького разрешения был больший приоритет. Ну или используйте диапазоны в медиазапросах.

Худший ответ: ну или как крайний вариант использовать !important
Вопрос: Какой купить лазерный принтер домой?

Лучший ответ: Xerox - непредсказуемая сложность заправки, Kyocera в бюджетном сегменте - просто шлак, НР считают себя лидерами и дерут за бренд, при этом картриджи в бюджетных моделях мизерные, только меняй. Самсунг никогда путных принтеров не делал, Canon передирает НР, забыв скопировать нормальные драйвера, Epson вовсе не бывает в сегменте бюджетных лазерников. Pantum - на рынок пришли китайцы и сделают вам дешево за ваш счет: терпимая печать, пока не сломается, и пока даже есть готовые комплекты из картриджа с чипом для перезаправки, но через год их не будет, и вы пойдете за новым принтером.
МФУ dcp-1610wr от Бразера взял домой, пока доволен, особенно работой по вай-фаю...

Худший ответ: Да любой принтер сейчас вам перезаправят в ближайшей конторе по перезаправки.
Я бы рекомендовал HP, как один из лидеров стабильности, но чтобы не переплачивать посмотрите также Canon.
Также орекомендую взять не просто принтер, а цветной лазерный МФУ, чтобы было уже все сразу и принтер и копир и сканер.
Если печатать что-то раз в неделю, то картриджа может хватать на 1000 листов, то есть чуть ли не на год даже в самых простых устройствах.
Например такое:
https://fcenter.ru/product/goods/141202-Cvetnoe_MF...
Вопрос: Чем эдиториал фото отличается от не эдиториал?

Лучший ответ: это юридический аспект как вы хотите его на картинке то увидеть ?

Худший ответ: lenorlux.livejournal.com/55613.html
Эдиториал так же должен иметь новостную ценность.
Вопрос: Облачное хранилище значений key-value, RESTful?

Лучший ответ: Таких публичных сервисов много, например, так же еще Windows Azure Table Storage, который еще не упоминали выше. Table Storage обеспечивает консистентность данных.

Худший ответ: Наверное что-то вроде этого — nextdb.net/
Вопрос: Что с JavaScript?

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

Худший ответ: b = a;
это копия адреса объекта "а", а не значение, для иного результата используй _.cloneDeep из lodash
Вопрос: Как синхронизировать большие таблицы?

Лучший ответ: Отчего не просто:
START TRANSACTION;
UPDATE mytable SET is_deleted=1;
INSERT INTO mytable (field1, field2, ...) VALUES
('field1', 'field2', ...), ('field1', 'field2', ...), ('field1', 'field2', ...), ...
ON DUPLICATE KEY UPDATE
is_deleted=0,
field1=VALUES(field1),
field2=VALUES(field2),
...
;
COMMIT;

Пишет

Худший ответ: Придумал такое решение:

1. загружаем файл в память в виде массива байт, где каждые K-байт — это строка таблицы.
2. сортируем этот массив алгоритмом сортировки, который не требует доп. памяти, т.е. сортирует на месте или использует logN памяти. На практике выбрал модифицированный (для сортировки строк по K-байт) quicksort из Arrays.sort, он же описан в статье «Engineering a Sort Function». Ест logN памяти, а работает мега быстро (2000000 массив сортирует за 250ms).
3. делаем запрос select id,a,b,c from mytable order by id (грузим не сразу все, а пачками, используя fetchSize).
4. сейчас будем бежать по первому отсортированную массиву из файла, это будет индекс i, и по строкам из запроса, это будет индекс j. Для простоты объяснения проще представить, что есть два отсортированных массива.
5. i = 0, j = 0
5.1 если A[i].id == B[j].id, то (если A[i] != B[j], добавляем B[j] в temp_update); i++, j++;
5.2 если A[i].id > B[j].id, то B[j] добавляем в temp_insert; j++;
5.3 если A[i].id < B[j].id, то A[i] добавляем в temp_delete; i++;
6. выполняем 3 запроса к этим временным таблицам. таблица в базе синхронизирована

Итого: память O(1), а работать будет так же быстро, как и с map.
Если файл насколько большой, например, миллиард записей, то вначале сортируем таблицу в файле используя mergesort, а дальше переходим к пункту п3.
Вопрос: ТЗ + документы, ответственность, как не пролететь?

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

Худший ответ: Нет документации? — Сделайте!
Для начала - все ваши устные договоренности с начальством вносите в какой-нибудь GoogleDocs (не забывая про изменения и дополнения).
Через некоторое время вам кто-то из коллег задаст вопрос о том, что и как у вас работает (должно работать). Вместо устного ответа дайте ссылку на документ.
Дальше кому-то это понравится - и он подключится к ведению документации.
Все. В конторе теперь есть документация хотя-бы в части требований.
С тестами — тоже самое. НЕБОЛЬШОЙ набор автотестов решает ОГРОМНЫЙ массив проблем с багами. Тесты нужны не модульные (где проверяется, что 2 х 2 = 4), а функциональные (по пунктам требований из документации, которую вы сделали раньше).
Вопрос: Почему при вардампе кирилица не показывается?

Лучший ответ: у вас код в utf8 а вы смотрите в кодировке cp1251Array
(
[title] => Бархатные ручки крем для рук (питательный) 80мл (25972)
[price] => Цена: 82 сом 

[brand] => Бархатные ручки
)

Худший ответ: Проверьте кодировку php-файла (внизу в редакторе) meta проверьте, проверьте htaccess не задаёт ли кодировку и если из БД выводите что бы там тоже utf-8 была как и везде.
Вопрос: Del~~~~~~~~~~~~~~?

Лучший ответ: Вообще, реально ли в Москве, например, найти работу с моими компетенциями?
Если ты не можешь ответить на этот вопрос, то нам  откуда знать?Холодная провинциальная смерть в объятьях Битрикса?
Да.
1. Найди вакансии, отправь резюме, пройди онлайн-собеседование. 
2. Оцени результаты, сделай поправку на скилл.
3. Возьми отпуск и езжай в Москву и проходи уже очные собеседования. Из этого отпуска ты можешь не вернуться. А можешь и вернуться. В любом случае, что-то произойдет.

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

Лучший ответ: Буквенный IP
Почитайте, пожалуйста, про доменные имена, DNS там =) 
По вопросу: меняйте файл hosts и хоть гуглом свой localhost обзывайте.
Что же до порта, если не критично - ставьте просто стандартный 80 порт

Худший ответ: У HTTP номер порта по умолчанию — 80. Если не хотите писать номер порта явно, запускайте сервис на 80-ом порту, тогда можно указывать только доменное имя.
Вопрос: Почему не ставится Zabbix?

Лучший ответ: Скрипт для автоматического разворачивания zabbix 3.2 https://gist.github.com/prodimon/891625b89f8843abd...
после установки http://ip/zabbix
логин/пароль Admin/zabbix

Худший ответ: Возможно, есть что-то полезное в  /var/log/syslog ?
Вопрос: Как переписать запрос в ORM Ruby on Rails?

Лучший ответ: для вашего запроса не нужны связи, вот ка-то такCall.where('CallContragent' => 123).or.where('CallContact' => [123, 123, 123]) # rails 5
Call.where('CallContragent = ? OR CallContact IN ?', 123, [123, 123, 123]) # rails 4
А вообще в модели Call судя по всему должно бытьbelongs_to :client
belongs_to :contact
А в Clienthas_many :calls
has_many :contacts, through: :calls
В Contact - что-то аналогичное тому что с Client, только для вызовов и клиентов

Худший ответ: class ClientCardController < ApplicationController
  before_action :get_id, only: [:index]
  def index
  end
  def get_id
    @client = Client.includes(:bills => [:bill_status]).find(params[:id])
    @calls = Call.includes(:call_status, :contact).where(
        'CallContragent = ? OR CallContact IN (?)',
        params[:id],
        Contact.select(:IDContact).where(:IDContragent=> params[:id]))
  end

end
Вот мое решение
Вопрос: Какую бы вы выбрали палитру и раскраску элементов интерфейса?

Лучший ответ: spmbt, моё мнение не поменялось — Без ZenComment и Без HabrAjax. Обе реализации плохи в плане цветовой палитры.

Лучше свести всю палитру к 2-3 тонам цвета и использовать различную насыщенность или яркость для выделения элементов.

Худший ответ: > Сейчас страницы выглядят легкими…
--цель проекта — улучшить информативность и удобство работы. Сейчас страницы лёгкие, а мышкой крутить много надо и тексты разделены пустотой, отчего 50% потеря места. Куча элементов не просто так, а для полезной информации перед глазами. И, кстати, часть информации скрыта и появляется при подведении мыши (фаворити, ссылка на себя; стрелки вверх нет вообще). Если посмотреть режим «дзен» в стилях — там и кнопки оценивания скрыты. Вместо всего этого добавляются (пока что) цветовые метки частоты комментариев авторов и одновременно — индикаторы разных авторов. Не вчитываясь в имена, сразу видишь, между сколькими авторами идёт диалог, есть ли там автор, много высказавшийся или нет. Для всего этого желательно столько меток, сколько авторов в топике, а их легко может быть более 30. Можно обойтись и динамическими пометками разных авторов, но это другая система, она не реализована (и покажите, где она реализована).
> почему вы говорите что нет разделителя
--Если он есть и плохо заметный, это равносильно тому, что его нет :). Вы никогда не пробовали быстро прокрутить длинную статью до начала комментариев? Помните, как пристально приходится искать глазами эти неконтрастные дату и прочую информацию?
Вопрос: Как через js вписать данные в обход обработчика vue?

Лучший ответ: Я в таких случаях форкаю библиотеки-плагин-компонент и правлю исходники.

Худший ответ: Заглядывали в issues? Почему-то мне кажется это ваша проблема. Вроде бы есть и workaround, а вроде бы последний комментарий не воодушевляет :)
Вопрос: Как работать с node.js на реальном проекте?

Лучший ответ: На nginx/apache проксируете настраиваете домен и проксируете на нужный вам порт.
Без nginx/apache можно сразу настроить listen сервера на 80 порт и он будет доступен по домену, который ссылается на этот сервер.

Худший ответ: То есть у нас нету выбора какой домен использовать
+ к ответу Никита Баев - посмотреть запрошенный домен можно в request.host
А настроить чтоб сервер был доступен можно прописав А записи в DNS панели домена
Вопрос: Почему некоторые пакеты по wifi идут до 2,5 сек?

Лучший ответ: На ПК всё норм среднее время ожидания ответа 32мс минимум 30 мс максимум 38Ну разумеется, провод это стабильно.В основно пакеты приходили как и на компе по 32мс, но где-то каждый каждый 20 пакет и следующие за ним штуки 3 приходят с сильным опозданием(До 2810мс). Это характерно для WiFi, если вы знаете как он работает, то ничего удивительного в этом не обнаружите, совершенно штатная ситуация.
Эфир один, и все устройства которые в нем работают делят его.
Поскольку работают все устройства WiFi практически на одной частоте, делят они в основном по времени.
В один момент времени вещает одно устройство, чем больше устройств в эфире, тем дольше ждать своей очереди.
Поэтому никакой гарантии - пакет может уйти очень быстро, или придется ждать очень долго.
А еще может быть коллизия, и пакет испортится, и будет передан повторно.

Худший ответ: >Потому что это радио, сынок!
Есть и некоторые другие причины опоздания пакетов, но большое кол-во других Wi-Fi это основная. А так помехи...
Вопрос: Как бороться с лимитом в 1000 записей LDAP?

Лучший ответ: То что юзер ищется на всех серверах - не очень круто. Нужна единая точка входа которая знает про то где хранится юзер - на каком сервере, и только туда запрос слать. Это же сколько вхолостую нужно запросов слать... Я бы сделал перед ним отдельный сервак, который отвечает только за авторизацию, ну и у него есть инфа кто где хранится. Авторизовался - перекинули на app сервак уже нужный.

Худший ответ: Решением моей задачи оказалось такая штука - «Глобальный каталог» (globalcatalog)
А вот решение как получить более 1000 записей было в ldap pager, только это штука не во всех версиях есть
Вопрос: Сделаю интернет-магазин бесплатно. Кому-нибудь нужно?

Лучший ответ: Добрый день есть желание с вами поработать

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

Лучший ответ: OAuthOAuth2 python server
Сайт не должен хранить пароль. Только его хеш для сверки.

Худший ответ: Смотрите в сторону использования API KEY. Каждому розданному API KEY позволяете создать/привязать одного пользователя. Программа у пользователя спрашивает имя и пароль, дергает сервер для регистрации/привязки, хоть простым post-ом, хоть специальный api запилите.
Дальнейшая судьба API KEY - на ваше усмотрение. Например, его можно использовать в процедуре восстановления пароля, как дополнительный токен авторизации.
Вопрос: Поддерживает ли Bitbucket сервер Delphi 7?

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

Худший ответ: Не будет вообще разницы что вы используете для разработки.
Читайте https://habrahabr.ru/post/150673/
Например здесь проекты для делфи от делфи 5 до xe 10https://bitbucket.org/ingword/examples
Вопрос: Облачный майнинг?

Лучший ответ: Допустим есть 250$, небольшая сумма, которая лежит без дела. 100 KH/s стоят 2.2$. То есть за 1 Mh/s - 22$ . На 250$, можно взять 11 Mh/s на год. Затем на whattomine считаем, и если курс будет точь в точь такой же, то за год я заработаю 256,14$ ? Получается так ?Да, получается именно так.
Но есть пара маленьких нюансов -На заработок влияет не только курс, но и текущая сложность сети, а она меняется несколько раз на дню, и имеет устойчивую тенденцию к росту, чем больше народу майнит, тем она больше. Увеличилась сложность в два раза- заработаете в два раза меньше.Курс тоже величина изменчивая, причем в случае криптовалют очень изменчивая, за несколько часов может упасть или подняться в несколько раз. Поэтому сложно предсказать курс даже на ближайшую неделю, а вы на год замахнулись. Заработать криптовалюту и получить реальные деньги это не одно и тоже. В лучшем случае при конвертации вы потеряете приличный процент. В худшем случае можете столкнутся с серьезными проблемами при выводе денег.Ну и еще одно - далеко не факт что вы их вообще получите, даже если заработаете. Все майнинг пулы, биржи криптовалют, сервисы облачного майнинга имеют одно нехорошее свойство - иногда они разоряются, и все их клиенты остаются при  своих интересах. Причем это касается даже самых крупных и известных ресурсов. Фактически вы отдаете свои деньги неизвестному человеку, и остается лишь надеяться на его стабильность и главное на порядочность. Если владелец этой конторы решит кинуть всех вкладчиков - он это сделает без проблем, и защиты от этого нет никакой. 

Худший ответ: Лучше в банк на депозит
Вопрос: Первый проект для изучения PHP фреймворков — что делать?

Лучший ответ: " ООП знаю" - поверьте, не знаете.
С Yii2 не советую начинать обучение. В качестве обучения возьмите Laravel5.2 или symfony3 или zend3, все что угодно но не в коем случае не Yii2. Иначе у вас будет не правильное понимание OOP, SOLID и еще многих бестпрактик.
Что касается паттернорм, в принцепи невозможно написать хороший код с длительным обслуживанием без: PSR, DI, Repository, Entity/DTO/VO, тестов и тп. Поэтому если вы не знаете хотя-бы одно из этих слов, прежде чем что-то писать и учить, прочитайте книгу по ООП. Иначе ничего хорошего вы не напишите.

Худший ответ: Оба хорошие, у всех есть будущее и все они достойны внимания, трудно сказать какой из них лучше подойдёт для первоначального ознакомления.
Yii уже довольно "мудрый" по этому очивидно что по нему больше примеров и доков.
Laravel "молодой но крайне перспективный" потому что впитал в себя всё хорошее из всех основных фреймворков до него, и я уверен его ждёт большое будущее.
Но если нужно попадать в заказы на фрилансе, то лучше сразу начинать с symfony, потому что на нём их больше всего, это факт.
А самое правильное будет поизучать их все и выбрать тот, который ближе по душе)