pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: Зачем юнит-тесты JavaScript?

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

Худший ответ: Юнит-тесты во фронтенде наиболее полезны для "фундамента" приложения. Например, вы пишите какую-то либу, которая отвечает за логику и обработку данных. Ее будет очень полезно покрыть тестами, чтобы в дальнейшем сосредоточиться на интерфейсе и быть хоть немного уверенным, что если появился баг, то его причины не лежат глубоко. 
Функционал же (события, изменения DOM) стоит тестировать только для того, чтобы в дальнейшем при расширении приложения, было легко убедиться, что базовый функционал не поломался. Естественно все варианты взаимодействия пользователя во всех средах протестировать не реально. Только базу.
Вопрос: Питание Arduino модулей от зарядки для телефона?

Лучший ответ: 1) Если это не сверхинтеллектуальный зарядник, что будет автоматом выключаться, если не подключен телефон - без проблем. Самый дешевый китайский зарядник годится.
2) Почему именно от сотового? Можно использовать специализированные универсальные блоки питания. Есть такие модели, где и напряжение можно переключать в заряднике. А еще и коннекторы различные в комплекте. Стоят недорого, компактные.
Или, если ваши требования к напряжению и току высоки, - ноутбучные универсальные же зарядники. Там тоже напряжение меняется и коннекторы разные в комплекте.
3) Если у вас это серьезно, то имеет смысл купить "лабораторный блок питания". Это недорого. Зато по току и напряжению и стабильности питания они на голову выше зарядок от телефонов. И регулировать можно не только напряжение, а еще и силу тока. Правда громоздкие.
Самые простейшие из них - совсем недорогие.
4) У Arduino то же напряжение что и у зарядника. Вы имели ввиду что не "напряжения не хватит". Наверное вы имели ввиду, что "сила тока слишком велика".
5) Не факт что от сотовых вам подойдут по силе тока. Самые дешевые выдают слишком мало ампер.

Худший ответ: Современные зарядки  с USB выходом прекрасно для этого подходят - они выдают стабилизированные 5 вольт, но вот ток может различаться от 0.5 до 3 ампер, сверяйтесь с этикеткой.
Вопрос: Как связать интернет-магазин и 1С?

Лучший ответ: Возможно ли такое реализовать?
Да. Обращайтесь к профессионалам.

Худший ответ: Как говориться: Любой каприз за ваши деньги. 
В так уточните на чем Интернет-магазин работает, далее смотрите интеграцию ее возможности. 
1С сгененир любой запрос и информацию.
Вопрос: Кем и где работать после специальности «Инфокоммуникационные технологии и системы связи»?

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

Худший ответ: Имея IT образование, в принципе, можно работать в любом интересующем направлении в этой сфере: разработка, тестирование, администрирование/DevOps, product/project менеджмент, тех. поддержка и т.д.
Тебе нужно самому выбрать направление и углубляться в него, потому, что ВУЗ даст только общие базовые знания.
В IT работу найти легко, по крайней мере в городах миллионниках.
Вопрос: Не устанавливается mysqlclient как решить?

Лучший ответ: Просто скачайте отсюда прекомпилированную версию.

Худший ответ: https://github.com/PyMySQL/mysqlclient-python/issu...
tl;dr: Предполагается, что проблема возникает на 64-разрядной винде. Скачиваем коннектор, в процессе установки меняем в пути установки Program Files на Program Files (x86).
Вопрос: Что не так в регулярке?

Лучший ответ: Плюс и скобки надо экранировать.
https://regex101.com/r/oKUEg7/1
^\+7\s\([0-9]{3}\)\s[0-9]{3}\s-\s[0-9]{2}\s-\s[0-9]{2}$

Худший ответ: Экранируйте +, круглые скобки и -^\+7\s\([0-9]{3}\)\s[0-9]{3}\s\-\s[0-9]{2}\s\-\s[0-9]{2}$
Вопрос: Как реализовать статус «просмотрено» в чате (напротив сообщений)?

Лучший ответ: Используй WebSocket. Ajax для такого функционала- прошлый век

Худший ответ: Отправлять текущий статус пользователя AJAX. Т.е. к примеру каждую секунду(к примеру!) - ajax запрос, типа пользователь читает текущий диалог, если он у него открыт - в таблице messages создать поле 'is_read' и ставить значение 1 (прочитано). Если закрыт - запросы не посылаются.
Также доводя до идеала - если пользователь не совершает действий отключаем сию систему с ajax )
Вопрос: Как реализовать на Ruby on Rails структуру категория, под категории, в под категориях категории товаров, ну и сами товары в категориях товаров?

Лучший ответ: Таблица "Категории"create_table :categories do |t|
  t.string  :name, null: false, unique: true
  t.integer :parent_id, index: true, foreign_key: true
end
В таблицу "Товары/Items" добавляешь:t.references :category, index: true, foreign_key: true, null: false
Модель "Категории":has_many :items, dependent: :destroy

has_many   :subcategories,   class_name: 'Category', foreign_key: :parent_id, dependent: :destroy
belongs_to :parent_category, class_name: 'Category', foreign_key: :parent_id

scope :parent_categories, -> { where(parent_id: nil) }
Модель "Товары"belongs_to :category# Что бы получить все основные категории
Category. parent_categories

# Получить подкатегории категории
Category.first.subcategories

# Получить товары категории
Category.first.items

Худший ответ: "... как писать код?", - это тоже надо было дописать в конец вашего текста.
Ну а вообще, если серьезно, то в таблицу categories добавляете поле parent_id. По умолчанию равно нулю (нет родительской категории). Думаю, тут все понятно.
Ну а дальше has_many в модель Category и belongs_to в Product. Про них (с примерами) вы можете почитать тут: guides.rubyonrails.org/association_basics.html
И вообще...Как отображать все это во вьюхах?
Ну это вообще зашквар какой-то. Вам про циклы рассказывать или что?
Также будет полезно:
guides.rubyonrails.org/active_record_querying.html
Вопрос: Какие книги по аутсорсингу и работе с фрилансерами стоит прочесть?

Лучший ответ: Книги?
Успешные фрилансеры работают, а не пишут книги.
Следовательно книги, которые вы найдете - скорее всего "инфобизнес" или просто биографии.
Читайте статьи фрилансеров, которые вот на Хабре пишут, на Реддите пишут.

Худший ответ: Джерри Тонер, Марк Сидоний Фалкс "Как управлять рабами"
Вопрос: В какие страны можно эмигрировать путем открытия там компании или студии?

Лучший ответ: Сервисы не мои, но меня поразило обилие информации:passports.io  - сравнение возможностей проживания и получения гражданства в разных странахincorporations.io  - сравнение стран для создания компании, налоги, отчётность, легальность итдbankaccounts.io  - сравнение банков для открытия "международных" счетовflagtheory.com  - разложенные по полочкам планы как уйти в офшор

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

Лучший ответ: С белки перешёл на этот https://transfonter.org/

Худший ответ: https://onlinefontconverter.com/
Сконвертируй тут, он как раз запоротые шрифты восстанавливает, сам с этим сталкивался.
Если ни один веб-сервис не помог - имеет смысл первоначально пересохранить ttf-шрифт через программу Typelight и потом уже конвертить в них.
Вопрос: Почему видеоуроки — это зло?

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

Худший ответ: Внесу свою лепту: правых нет, как и левых. Все подходы имеют плюсы и минусы, а так же сильно влияет как человек воспринимает информацию и чего хочет добиться. В обоих случаях важно уметь самостоятельно искать информацию, объединять ее из разных источников и впитывать чужой опыт. 
Видеокурсы считают злом из-за того что информацию подают поверхностно, в быстром темпе и для быстрого входа (но это в основном, не всегда так). В книгах есть тоже минусы - до практики доходит долго и многим надоедает. 
Выбирать всем, но я бы советовал пользоваться и тем и тем ПРАВИЛЬНО и ПО НАЗНАЧЕНИЮ
Вопрос: Как называть классы CSS?

Лучший ответ: https://ru.bem.info/ - почитайте, хорошая методология, так же потом сможете в резюме указать (Верстаю по BEM методологии ;) )

Худший ответ: Конкретно из БЭМа лучше всего взять это: https://ru.bem.info/methodology/naming-convention/
Вопрос: Как правильно работать с URI запросами в PHP? Как грамотно настроить роутинг?

Лучший ответ: выглядеть будет https://site.ru/?city=spb/post?id=23
Вы конечно можете в адресную строку браузера любую ересь написать, но тогда и серверную часть придется изобретать, ну чтобы она смогла разобрать эту вашу хитрую строку.
Чтобы не изобретать это для каждого проекта заново придумали стандарты.
https://tools.ietf.org/html/rfc3986
И если вам нужно передать два параметра, то выглядеть оно будет так:https://site.ru/?city=spb&postid=23при отправке submit будет отправлять на страницу существующую физически - spb.php затем post.phpВы конечно можете это сделать, но зачем? Вы действительно хотите создавать физически существующие страницы для каждого города? У меня в текущем проекте их более 10 тысяч, например. Замучался бы создавать.
Можете начать отсюда:  Как хранят свои страницы крупные сайты?

Худший ответ: Почитайте про .httaccess и mod_rewrite
Вопрос: Обратная связь приходят кракозябры через раз, как?

Лучший ответ: Если я правильно понял, вы приводите текст к кодировке UTF-8 и отправляете его почтой.
Однако я не вижу чтобы в почтовое сообщение вы включили заголовок, говорящий почтовому клиенту что внутри лежит UTF-8, тем самым даете ему самому попытаться определить кодироку, что не всегда ему удается.
Добавьте в письмо правильный Content-type + charset.

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

Лучший ответ: nameFunc(value){

}
<a href="#" onClick={this.nameFunc(value)} index={value}>Link</a>
так не пайдет?

Худший ответ: nameFunc(value){

}
<a href="#" onClick={this.nameFunc(value)} index={value}>Link</a>
так не пайдет?
Вопрос: Как удалить элемент вектора внутри цикла?

Лучший ответ: Можно все сделать и без цикла:contours.erase(std::remove_if(contours.begin(), contours.end(),
		[this](std::vector<cv::Point> vec)->bool
                         {return vec.size() < this->mParams.minContourSize; })
		,contours.end());

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

Лучший ответ: Какие в 1С есть уязвимости?
1.Человеческий фактор.
2....

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

Лучший ответ: А лучше сделать радиокнопками

Худший ответ: А зачем тут селект?
Верстайте как есть дивами, а по клику передавайте параметр в скрытый инпут и в форму.
Не надо извращаться там, где оно не требуется.
Тут значения изначально известны, чтобы наворачивать селект еще необычный.
Вопрос: Как поставить babel на виртуальный хостинг?

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

Худший ответ: Нет кончено
Используйте либо вдс либо компилируйте на своей стороне и потом запускайте деплой
Вопрос: Как убрать имена всех контроллеров из url в Yii2?

Лучший ответ: Дополню ответ от Илья Караваев 
Все это настраивается в конфигурации urlManager, например если Все запросы в которых нет контроллера необходимо перенаправлять в SiteController, тогда это можно сделать так:'urlManager' => [            
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [                
        '<action>' => 'site/<action>', 
    ]
],
если же Вы хотите к действиям каждого из контроллера обращать без их имени тогда для каждого действия необходимо прописывать свое правило, например:'urlManager' => [            
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [                
        '/contact' => 'site/contact', 
        '/auth' => 'user/auth'
    ]
],
Более подробно можно почитать здесь

Худший ответ: Через urlManager. Просто нужно составить правильный список правил (rule). И скорее всего Вам придется это делать для каждого такого сокращения, поскольку Вам в любом случае нужно явно указать куда направлять запрос для самой Yii.
Вопрос: Какие знания PHP нужны, чтобы сделать простой интернет-магазин?

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

Худший ответ: Если нужен простой магазин и использовать Opencart, знания в php нужны будут минимальные (скорее всего никакие), больше по верстке, дизайну и шаблонизатору
Вопрос: Как узнать индекс найденного значения и реализовать поиск значения по индексу?

Лучший ответ: Не очень понял ваше описание задачи. Для поиска одинаковых элементов в двух массивах можно воспользоваться подобной конструкцией:var intersect = arr1.filter(item => arr2.indexOf(item) != -1);
intersect будет содержать массив всех совпадающих элементов.

Худший ответ: Для нахождения индекса первого вхождения можно использовать String.prototype.indexOf()
Если значение не найдено - вернет -1. От этого и плясать. (Ну если я правильно понял задачу).
Вопрос: Какие нужны характеристики ПК для работы с 4К видео в adobe premier?

Лучший ответ: https://www.youtube.com/user/GoodChoiceShow
тебе сюда, парни уже делали обзоры для подобных задач. Есть все ссылки и стоимость.

Худший ответ: А в чем работаете?
Вопрос: Нужен ли Linux для начинающего разработчика?

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

Худший ответ: Не вижу смысла. Вы ведь не в продакшене собираетесь Windows использовать, а только для разработки.
Вопрос: Куда стремиться PHP программисту?

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

Худший ответ: 1
3 уже следствие из 1
Вопрос: Почему до сих пор нет переводчика с животного языка?

Лучший ответ: Нет языка - нет переводчика.

Худший ответ: Животные общаются не только голосом, а некоторые вообще без него обходятся.
Вопрос: Как ведет себя программа на Java, если в HashSet находятся несколько РАЗНЫХ объектов с одинаковым HashCode?

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

Худший ответ: Зависит от того как для них отработает equals().
Собственно если equals() будет возвращаться true, то они просто изначально не добавятся в Set.
Если же они все-таки добавлены, то будут лежать в одной ячейке, которая будет итерироваться при извлечении.
Вопрос: Как перевернуть строку за пол прохода цикла?

Лучший ответ: Существует около десятка способов перевернуть строку, один из которых - рекурсия.var str = 'chupacabra';

function reverse(str) {
  if (str.length === 0) return '';

  var
    s1 = str[0],
    s = str.slice(1, str.length - 1),
    s2 = str[str.length - 1]
    
  return s2 + reverse(s) + s1
}

console.log(reverse(str))
В данном примере строка переворачивается за 5 проходов
https://jsfiddle.net/zxe296y9/1/

Худший ответ: На вскидку, такfor(let i=(string.length-1); i>=((string.length-1) / 2); i--){
   let a = string[i]
   let b = string[string.length-1]
   let c = a
   a = b
   b = c
}
Т.е. за один оборот, меняем местами крайние элементы
Вопрос: Дальнейшее развитие для новичка при отсутствии вакансий в городе?

Лучший ответ: По поводу фриланса, вариант развития:
1. вы несколько лет работаете за копейки
2. понимаете что конкурировать с индусами и школьниками не получается
3. т.к. вы один, то вам не у кого учиться, и вы делаете все абы как лишь успеть до дед-лайна
4. все проекты которые вы делаете очень примитивные и не приносят вам никакого опыта
5. вы понимаете что вы плохой менеджер и не можете грамотно работать с несколькими клиентами, да еще и писать код
6. вас время от времени кидают и вас это жутко бесит
7. иногда гонорар бывает внушительный, но вы понимаете что это только в рублях. Новый компьютер за доллары вы себе позволить не можете
8. после нескольких лет вы пытаетесь найти full-time работу, но оказывается что вы говнокодер, и никто с вами работать не хочет.
9. вам 30, вы плохой разработчик и плохой менеджер, у вас ребенок которому 2 года, и жена которая хочет от вас уйти. Так же вы живете в съемной маленькой квартире, т.к. банк не дает вам кредит на квартиру из-за того, что вы не трудоустроены официально. И даже на junior вакансии вас никто не берет уже.

Худший ответ: Учите PHP сразу с привязкой к какой-нибудь популярной CMS. Пишите модули, т.е. решайте сразу задачу. 
Это если вы заработать хотите, а не тешить свое ЧСВ академическими знаниями и дипломами.
Вопрос: Чем реализовать возврат системы в исходное состояние после перезагрузки?

Лучший ответ: Посмотрите: https://samforum.org/showthread.php?t=30911

Худший ответ: Посмотрите: https://samforum.org/showthread.php?t=30911
Вопрос: Как в bootstrap4 скрыть блок в моб версии?

Лучший ответ: Тут почитать про изменения.d-none
и.d-{sm,md,lg,xl}-none

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

Лучший ответ: Скажите, как работает кнопка запуска на корпусе пк? Она является переключением питания или как?
Нет. Материнская плата все время под питанием. Кнопка замыкает контакт на материнке, подавая сигнал включения, логика запрограммирована во всех материнках, поддерживающих ACPI. В древних материнках (до 2000-х) кнопки питания не было, был обычный тумблер - он переключал питание.Хочу сделать запуск машин без физического присутствия кнопки на нескольких машинах. 
Почитайте wake-on-LAN - сейчас это встроенно в 99% материнок, не нужно ничего делать физически, просто настроить.

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

Лучший ответ: codepen.io/Lumore/pen/aZJKyj, только когда многовато

Худший ответ: Ну и мой измененный вариант юзера Lumore 
codepen.io/anon/pen/pbexER
Вопрос: Какой дистрибутив выбрать для пожилого ноута?

Лучший ответ: Ноут на i5 - пожилой? Ну, вы и кушать...
Отталкиваться надо в первую очередь от программ, которые будут запускаться. Например, если вам нужен Вайбер, у него тупо нет 32-битной версии. И это настолько общий тренд, что проще с ним не спорить, критической разницы между x64 и x32, кроме таких нюансов, вам все равно не заметить.
Сколь угодно прожорливое DE будет в любом случае легче современного браузера. Не хотите, чтобы они жрали память с двух концов, и не радуетесь свистоперделкам - ну, Xfce для общего случая достаточно. Бегать по дистрибутивам в поисках каких-то отличий, по большому счету, незачем - с Xubuntu будет элементарно проще решать проблемы, если они возникнут.
Стоит попробовать браузер попроще, вдруг зайдет. Midori, например, недавно обновился...
Ну, и проблем с дровами, если это свежий дистрибутив и несвежее железо, быть не должно. При условии, что железки вообще в Линуксе поддерживаются.

Худший ответ: я выбрал минт мате
убунту вообще не перевариваю
х64
хром 5-7 вкладок (всё вместе) кушает 1.3 - 2gb оперативки
Вопрос: MySQL: как грамотно составить запросик?

Лучший ответ: В данной ситуации - просто через join получать выводПиджак замшевый --- зеленый
Пиджак замшевый --- синий
Магнитофон импортный --- большой
Магнитофон импортный --- маленький
и в php строить по нему дерево или что хочется.
На чистом SQL задача без диких извращений и геморроя не решается.

Худший ответ: SELECT goods.name, opt.val FROM 'goods' INNER JOIN 'options' ON opt_goods_id=goods_id
Ну а дальше ручками.  Как-то так:$a = [...];
$b = [];

foreach ($a as $item) {
    if (!array_key_exists($item['goods_name'], $b)) {
        $b[$item['goods_name']] = [];
    }

    if (!in_array($item['opt_val'], $b[$item['goods_name']])) {
        $b[$item['goods_name']][] = $item['opt_val'];
    }
}
Вопрос: Какую схему мотивации можно предложить программисту, решающему сложные задачи (последняя линия поддержки, с задачей никто не смог справиться)?

Лучший ответ: 0. Избегать состояния, когда в компании есть "звезда"
0.1 Стараться, чтоб звезда научила 2+ человек до своего уровня или близкого у нему
1. Спросить у человека, чем бы он хотел заниматься
2. Отговорить персонал, который не понимает, что такое ИТ, от KPI

Худший ответ: Директор хочет видеть конкретные и измеримые показатели работы.
Это невозможно.
Выход один — заменить директора.
Вопрос: Зачем нужны указатели в С++?

Лучший ответ: Правильно поступаете, лучше на всякий случай заранее спросить.
Размер матрицы минимум 2х2, а то и больше.
Вместо указателей можно использовать указатели на указатели - так прикольнее. Здорово же, когда указатель указывает сам на себя.
А с динамической памятью лучше бороться работать зажмурясь.
Спрашивайте ещё, тут у нас не все кругом, а люди понимающие. И всегда рады конкретным вопросам )

Худший ответ: 1. Указатели нужны, в общем, затем же, что и в чистом С.
2. Лучше использовать ссылки, да.
3. Vector не вместо указателей, это вообще разные вещи.
4. С динамической памятью работать через new/delete, эти операторы работают с указателями. В этом случае они нужны.
5. Матрицу вы можете представить, например, как Vector< Vector< double > >
Вопрос: В чём ошибка при парсинге даты?

Лучший ответ: Дата не указана, только время.

Худший ответ: Уважаемый, дата обязательна. Это формат, как может использоваться. Но дату обязательно надо указать.
Вопрос: Как оформить дополнительный интернет-канал в linux?

Лучший ответ: Проблема доступности количеством каналов не решится.
Для веб сервиса, нужен нормальный фронт балансер.
Сначало все упрется в A запись DNS, по доменому имени же заходим.
1 решение. DynDNS будет менять запись в зависимости от рабочего канала.
2 решение. Свой собственный DNS сервер, который через Round Robin будет балансировать записи.
Но от кеша DNS пользователя все равно никуда не деться, активный пользователь наткнется на ошибку доступа к сайту.
Далее запрос идет на вебсервер, а значит правила и маршрутизация должны быть настроены отдавать пакеты на тот канал с которого пришли, решается маркировкой трафика. Таким образом одновременно могут работать 2 и более каналов.

Худший ответ: 1. Разве система сама не должны подхватывать? 
Как вариант - написать скриптик, который будет в случае падения сетки переключать на другую.
2. Посмотрите это:
https://habrahabr.ru/post/133085/
https://xakep.ru/2015/04/07/195-sms/
или
как только поднялся интернет с модема - через сервис по типу smsaero.ru/sms.ru, ведь интернет то уже будет
Особо других вариантов не вижу.
Вопрос: Что использовать в качестве БД для поиска/агрегирования по тегам?

Лучший ответ: Можно попробовать redis с множествами и пересечением
у каждого тега есть свое множество записей
tag1 - record1,record2,record3,record4,record5
tag2 - record5,record6,record3
tag3 - record1,record3,record5
Дальше  выполнить мат операцию SINTER tag2 tag2 tag3 
В результате получится record3, record5
Если важна сортировка и лимиты - то можно использовать упорядоченные списки и команду ZINTERSTORE - но она менее производительна

Худший ответ: ElasticSearch
Обсуждение Sphinx или ElasticSearch?
Боевой опыт у 2ГИС https://habrahabr.ru/company/2gis/blog/213765/