pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: С какой версии начинать изучение PHP?

Лучший ответ: Судя по сроку поддержки версий следует начинать с PHP7. Однако знать отличия версий PHP5.4+ стоит из-за огромного количества написанного legacy-кода, который еще долго будет поддерживаться компаниями

Худший ответ: Знать про функции (особенно deprecated) версии 5.3+ будет хорошо, а начать лучше с 5.6 - это последняя стабильная в ветке 5.x
Книгу порекомендую «PHP. Объекты, шаблоны и методики программирования» Мэт Зандстра, четвёртое издание, 2015 год - там PHP 5.6 - книга прям по канонам шаблонов проектирования
По версии 5.4 можно взять «PHP. Рецепты программирования» Дэвид Скляр, Адам Трахтенберг, третье издание, 2015 год - там отличные примеры кода, которые часто пригодятся на практике.
Ещё я бы порекомендовал посмотреть на код в ООП стиле для версии 5.0 - он довольно часто фрагментарно (по привычке наверное) используется в 5.3+. Это для общей эрудиции, чтобы не запутаться в синтаксисе приложений, которые могут попасть в руки. Например, передача по ссылке объектов как параметров функций, присвоение объектов по ссылке - это уже не используется, объекты и так передаются и присваиваются по ссылке.
В руки может попасться код любой версии PHP в процедурном стиле. Весьма своеобразный код. С глобалами, константами и прочей "не ООП" трухой. Процедурный стиль всё ещё используется, особенно для одноразовых консольных скриптов.
Нужно знать, как мигрировать код с deprecated библиотеками, которые предыдущим программистам лень было заменять на новые (например, mysql_ или ereg_  ).
Вопрос: Как сделать плавный переход по пунктам меню?

Лучший ответ: Это называется lavalamp menu.
Вот тут есть примеры с вертикальным меню.

Худший ответ: Я так понял нужна полосочка которая ездит в выпадающем. Сделано оно там вообще не на after. Если проанализировать код - там есть span, который absolute относительно всего выпавшего блока relative собственно (я не запариваюсь с объяснением, для человека который понимает более менее в вёрстке всё это и так ясно, так что если что не понятно - в комментах переспрашивайте). Логика - при наведении на тот или иной элемент узнавать его высоту и его расстояние от начала родительского элемента (с помощью jquery это делается в 2 счета вообще). Дальше задача просто сдвинуть на нужное количество px ваш бегунок. С ходу как рассчитать расстояние сверху имея высоту и расстояние элемента от начала родителя - я честно формулу не придумаю, так как спать хочу. Тут самостоятельно вам подумать стоит ну или пилить все пункты меню одинаковой высоты и опускать элемент на количество px сверху + там ну 3px (количество "+ там ну" узнаете самостоятельно, просто сдвиньте ваш бегунок сначала на количество px сверху {я под этим подразумеваю расстояние от в целом всего блока, который является выпадающим до элемента, на который навели} а потом спустите с помощью инспектора на середку вашего элемента и посчитайте на сколько спустили). Логика такая. Делайте сами, это будет интересно, а я спать. Не получится - пишите. Запилю на codepen иль ещё где и скину ссыль сюда, но уже завтра или когда свободное время будет.
Ссылка на скрипт от Алексей  выглядит чет очень стремно, некрасивое перетекание вообще там.
Вопрос: Достаточно ли сильной будет такая схема хэширования с двойной солью?

Лучший ответ: Security through obscurity - наихудший вариант. Передавайте пароль через защищённое соединение и не извращайтесь.
А дырка в том, что если кто-то может перехватить пароль, то он может с тем же успехом перехватить и кэш, этого будет достаточно для аутентификации.

Худший ответ: алгоритм получения соли в android приложении при желании можно узнать.
Вопрос: Mikrotik проблема с дистанциями маршрутов, в чем я ошибся?

Лучший ответ: ваша задача решается совершенно по другому ловите решение https://www.vasilevkirill.com/MikroTik/1/

Худший ответ: Суть проблемы была в Непонятных ARP запросах при указании назначения маршрута 0.0.0.0/0 и доступности шлюза провайдера (шлюз пинговался). Складывалось впечатление, что вместо того что бы передавать пакеты через шлюз указанный в правиле маршрута, микротик начинал работать так, вроде весь внешний интернет подключен к нему локально в один широковещательный домен. При этом правило с меньшей дистанцией в таблице Ip Route просто игнорировалось.
Проблема "прошла" после установки ОС версии 6.23 и настройкой правил Ip Route заново.
Вопрос: Правильно ли я выбрал ЯП?

Лучший ответ: Правильно

Худший ответ: - Хочу понять как работает пк;
- Хочу понять как работает вредоносное ПО;
- Хочу написать свою OC. 
Для таких целей обычно выбирают assembler и пару книжек типа Таненбаума "Архитектура эвм" и "Операционные системы"
Вопрос: Как сделать шифрованный канал между 2 приложениями?

Лучший ответ: Да, это, разумеется, возможно.
Сертификат сервера будет проверять ваше клиентское приложение. При этом вы можете задать свою функцию для проверки сертифката через options.checkServerIdentity()
https://nodejs.org/api/tls.html#tls_tls_checkserve... 
Обычно в таких случаях проверяется не имя и не цепочка доверия, а просто хэш сертификата сервера (fingerprint  или fingerprint256 ) и годится совершенно любой самоподписанный сертификат, причем это гораздо безопасней и надежней чем доверие к корневым CA. Такой прием в приложениях обычно называют Certificate pinning.

Худший ответ: В принципе - не за чем здесь TLS, если два серва - ваши.
Можно просто дать каждому серверу одинаковую "соль" и "ключ".
И с помощью любой криптостойкой функции сразу начать передавать данные между ними.
Время от времени - обновляйте пару соль-ключ.
Вопрос: Как предоставить андроид приложению фейковые данные?

Лучший ответ: см. XPrivacy

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

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

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

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

Худший ответ: Если эти данные уходят на страницу JSON-ом, то возможно лучше if, чтобы сэкономить трафик. Этот if окупится с головой.
Если рендерится на сервере - не важно. Вот как выбрали из базы, так и отдавайте в шаблонизатор.
Вопрос: [Python] Как найти первый заказ?

Лучший ответ: Изучаю хирургию. Уже наложил пару интересных швов, хочется уже чего-то посерьёзнее. Подскажите, где найти заказчиков. 
P.S скальпелем не владею.
Вы не указали, что вы написали, поэтому возникает вопрос - с чего вы взяли, что ваш опыт что-то стоит?

Худший ответ: Если в web работать, то без django\flask точно никуда. Без опыта нормальных клиентов найти нереально, я по началу на несколько студий удаленно за копейки работал, а всякие фриланс биржи по моему скромному мнению не эффективны.
Вопрос: Периодические редиректы на рекламные страницы ww9.domain.com на хостинге X5X.RU?

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

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

Лучший ответ: Выяснилось, что удобного места со списком заданий нет, кроме ответа от Максим Зайцев 
Так же выяснилось, что созданием ТЗ и последующим разбором в данный момент никто не занимается кроме меня, поэтому добавляю ответ от себя.Здесь есть задания и разбор. Будет пополняться.Задание 1 (уже разобрано)Задание 2 (будет разобрано в конце мая)
p.s. ссылки ведут на github, поэтому я надеюсь у модераторов не будет претензий.

Худший ответ: Напишите клон https://github.com/gothinkster/react-redux-realwor...
Вопрос: В чем смысл запускать на Х-ядерном процессоре более Х потоков?

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

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

Лучший ответ: Справочник по командам никто лучше, кроме производителя процессоров вам не даст. Заходите за сайт интел/амд и качайте референс.
А учебник для ассемблера не имеет смысла. Ибо всё, что относится к ассемблеру — это команды. Остальное — платформозависимые вещи, которые будут различаться в каждой системе, архитектуре, и т. п. Соответственно, в этих учебниках вас будут учить вещам, которые уже либо почти не используются, либо про них уже забыли.
В ассемблере половина команд это mov, lea и call. Прочитайте, что они делают, и уже половину поймёте. Ещё 45% сверху — около 20 команд всего. Остальные 5% занимают сотни и тысячи других инструкций, которые никто в живую в глаза не видел. Это можно взять за 10% от "знания ассемблера". Остальное зависит от архитектуры, системы, компилятора, разрядности, и ещё кучи факторов.
Сейчас нет такого учебника, чтоб научил вас ассемблеру. Если хотите основы с 16 бит, то берите любой. По современным вещам информации нет нигде, кроме официальных документов производителей процессоров.

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

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

Худший ответ: 1) спланировать мебель
2) подвести минимум 2 4х-парных кабеля к месту (чтобы в крайнем случае получить 4 100mbps линка)
3) в каждую комнату я заложил +2 4х-парных кабеля в угол комнаты - под видеонаблюдение + 2х-диапазонный роутер (все питается по POE) + к ним же можно будет датчики подключить
все кабели (около 20 концов на квартиру ~60 метров) свел в лоджию-серверную
Вопрос: Почему pеклама google adsense появляется не сразу?

Лучший ответ: Это норма. На первых порах гугл оценивает тематику страницу и не транслирует рекламу (насколько я понимаю). Дело может немного улучшить выставление в адсенсе чекбокса в настройках рекламного блока "При отсутствии объявлений показывать заливку цветом" - как-то так он называется.

Худший ответ: Такая же проблема. Захожу на страницу - рекламы нет, в исследовании кода есть ссылка на рекламу, открываю этот баннер в новой вкладке, обновляю страницу и появляется этот же самый баннер который с первого раза не загрузился.
Уверен это проблема с гугл...
Вопрос: Как на GO спарсить инфу с сайта и найти определенную фразу?

Лучший ответ: вот либа огонь, то что надо
https://github.com/PuerkitoBio/goquery

Худший ответ: Мой код по этому вопросу.
Спасибо, GLaDosSystem.codepackage main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"regexp"
)

func main() {
	resp, err := http.Get("LINK")
	if err != nil {
		log.Fatalln(err)
	}

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatalln(err)
	}

	tm, err := regexp.Match("TEXT", []byte(body))

	if tm {
		fmt.Println("true")
	} else {
		fmt.Println("false")
	}
}
Вопрос: Высоконагруженные системы, каковы принципы разработки?

Лучший ответ: давайте так, есть два вида задач:
 - CPU bound - различные алгоритмы, математика, кодирование/декодирование/шифрование... словом все что нагружает процессор.
 - I/O bound - собственно когда у нас идет множество операций с вводом/выводом, где-то 90% задач связанных с WEB и серверной разработкой.
Для CPU bound стоит использовать языки вроде Си, Rust, Dlang, Go и т.д. Словом языки которые компилируются в эффективный машинный код.
Для I/O bound - Go, NodeJS, Erlang, Java.... да в принципе не важно какой язык, главное что бы использовались неблокируемые вызовы и отсутствовали блокировки. 
Еще есть очереди задач, горизонтальное масштабирование и т.д. Архитектура и алгоритмы используемые в системе влияет часто намного сильнее нежели языки программирования.Какие языки лучше использовать для этого? Какие не использовать? 
Никаких ограничений, только здравый смысл. То есть врядли мы будем писать сложную математику на node.js, но задач связанных с этим намного меньше. Так же никто не говорит о том что систему нужно писать строго на одном языке. Нынче модно использовать микросервисы, каждый из которых может быть реализован на своем языке и со своей базой данных, идеально подходящих для конкретной задачи.
Еще не стоит забывать о алгоритмах. Они тоже должны быть оптимальны. Например взять простую задачу - кластеризация меток на карте. Представьте что у вас в базе миллион объектов, которые мы должны выводить на карте. Поскольку делать подобное на клиенте будет проблематично - мы должны делать это на сервере и возвращать на клиент ровно столько данных сколько ему нужно.
И на таких объемах даже если бы мы взял Си, если наш алгоритм имеет сложность O(N^2) то как бы ничего тут особо не поделать. И так и так медленно будет. А вот если мы возьмем какие-либо алгоритмы имеющие сложность O(NLogN) то уже возможно что алгоритм этот можно хоть на php/python/ruby имплементить. Так например у меня этот алгоритм реализован на Java и не самым эффективным образом. Справляется.
Еще влияет скорость разработки (всякие ruby/python/node в этом плане хороши), стоимость поддержки (Си поддерживать сильно дороже чем Go например, хотя всегда можно написать все настолько плохо что проще выкинуть чем поддерживать), стоимость разработчиков.... Скажем найти дешевых сильных разработчиков на Go или Rust будет весьма проблематично.
Так же не стоит забывать что сервера нынче стоят не так дорого. Иногда бизнесу проще доплатить за еще десяток серверов нежели писать все на плюсах.
Собственно главное правило высоконагруженных систем - нагрузочное тестирование а потом уже оптимизации

Худший ответ: Про cgi, python, php, apache нужно сразу забыть. Лучше забыть и про http и вебсокеты. А смотреть на C/C++, node.js, Go, in-memory базы данных, TCP сокеты.
Вопрос: Где можно получить второе высшее IT образование заочно или дистанционно по спец. программе?

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

Худший ответ: Посмотри в сторону ИТМО там даже есть дистанционное образование, но конкурс серьезный
Вопрос: Не срабатывает :hover:before?

Лучший ответ: img:before
У тега img не может быть псевдоэлементов!

Худший ответ: необходимо елемент : hover: before
Вопрос: Как ограничить подключаемые утройства по Wi-Fi к микротику?

Лучший ответ: Многие роутеры уменьшают TTL (не всегда и не все), поэтому как вариант блочить пакеты с ttl=127 и 63,/ip firewall filter
add chain=forward in-interface=local ttl=equal:127 action=drop
add chain=forward in-interface=local ttl=equal:63 action=drop
 но это не стопроцентно. Китайцы могут купить микротик или поставить роутер с *wrt и выправить ttl обратно :)

Худший ответ: Они за инет заплатили. Пусть делают, что хотят. Ограничения по полосе будет достаточно, чтобы небыло смысла в перепродаже.
Контролировать наличие роутера/NATm помимо метода, озвученного paxlo, можно ещё вручную или передавая трафик HTTP на некий сервер контроля. Если с одного IP подключаются разные версии браузеров можно предположить наличие NAT. Вероятно, есть ещё варианты отслеживания по трафику.
Вопрос: Оценка на mail-tester.ru 4,7, что делать?

Лучший ответ: MIME_HEADER_CTYPE_ONLY
В письме есть заголовок Content-Type, но нет сопутствующих заголовков. Добавьте заголовок MIME-Version и/или Content-Transfer-Encoding с корректными значениями.MIME_HTML_ONLY
Если в письме есть HTML-часть, то рекомендуется, чтобы в нём была аналогичная по содержанию PLAIN-часть. Делайте multipart-письмо.SUBJ_ILLEGAL_CHARS
В заголовках допускаются только символы из 7-битной части ASCII. Все остальные символы должны быть закодированы, например через Base64. В теле письма все символы должны соответствовать кодировке, указанной в заголовке Content-Type.

Худший ответ: Да ничего, спамассассин указывает что в теле слишком много html и слишком мало текста.
в теме письма - неправильные символы...все это чушь
Вы пытаетесь подстроится под чужой сервер со своими настройками, этого делать не нужно.
Нормально у вас все в письмах, не переживайте. Тест до яндекса и гугла проходит? Если да, тогда выдохните и продолжайте настройку.
Вопрос: Gpu грузится на 100%, gtx 660 windows 10 как исправить?

Лучший ответ: дрова стоят новые
Поставь старые.

Худший ответ: Майнер поди поймал. Отключи инет и перепровь фпс. Если будет норм то точно майнер
Вопрос: Как создаются такие карты?

Лучший ответ: Глянул код - там ничего сверхестественного. CSS3 анимации, стрелки на SVG, немного джаваскрипта...
Загляните и вы =)

Худший ответ: Ссылку дайте хоть посмотреть то? Что вам описывать? Картинку?
Вопрос: Что означает однопоточность Node.js?

Лучший ответ: Значит ли это, что 143 потока процессоров будут простаивать
вообще дапо этой причине Node не применяется для действительно сложных проектов с огромной аудиторией
Серверный JS появился не так давно, на это надо делать скидку. Всё от проекта зависит и требований, V8 довольно хорошо оптимизирован внутри, но если нужна многопоточность из коробки то лучше взять go с его горутинами, другое дело что это не всем надо + мне нужно новый язык изучать а так я знаю JS и могу строить систему пусть и однопоточную но зато на привычном стеке.
Когда C++ появился многоядерные процессоры даже не планировались ещё, способы работы с многопоточностью были добавлены во многие языки намного позже, где-то более удачно, где-то менее.

Худший ответ: Значит ли это, что 143 потока процессоров будут простаивать ?
грубо говоря даРешают ли кластеры эту проблем ?
да, но проще запустить N процессов nodejs через тот же supervisordЗначит в воркеры можно поместить только какие то вычисления. 
можно, правда целесообразность зависит от поставленной задачиМне лично кажется именно по этой причине Node не применяется для действительно сложных проектов с огромной аудиторией
для чего-то маленького, завязанного на event-loop нода подходит, тот же statsd - вполне production hl решение.
Вопрос: Правда ли что программистам навязывают определенные мысли?

Лучший ответ: 1)обязательно надо знать математику алгоритмы и тд(даже если это не используется)
Если хочется выйти за рамки дешевой рабочей силы - да.2)надо работать бесплатно на первых порах
Зависит от навыков самообразования. Кто-то уже в школе делает деньги, а кому то и после университета сложно найти работу.3)создавать open source проекты бесплатно чтобы показать всем свой код
Скорее нет4)всегда думать о работе даже по выходным и тд
Если хочется выйти за рамки дешевой рабочей силы - ДА.UPD:
Реальность такова, что если вы хотите выйти за рамки дешевой рабочей силы - у вас ровно 2 способа это сделать: 
а) вы можете основать собственное дело
b) вы можете в чужом деле вырасти из человека который пишет код, в партнера который решает проблемы бизнеса ( что в конечном счете эквивалентно предыдущему пункту)
И то и другое подразумевает что вы перестаете разделять свою жизнь и работу.
Вы, это и есть то дело, которым Вы занимаетесь. 24/7/365.
И это к слову сказать справедливо для практически любой сферы, не только IT.

Худший ответ: 1) Да
2) Не обязательно, но в погоне за опытом можно согласиться на разное
3) Не обязательно
4) Нет
Вопрос: Как правильно делать «горячие/интересные» посты?

Лучший ответ: Сделайте ссылку на вторую страницу что-то вроде '?list=ID&page=2'
Где ID, это id последнего списка.
Например на хабре забивают на это...
UPD: чтоб не забивать адресную строку и поисковики, можно этот ID хранить в cookie

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

Лучший ответ: Нажать Copy, указать другой ip, сохранить

Худший ответ: Либо подсетку указать, либо создать другую политику и соответственно другую пировую запись, в которой будет привязана эта политика.
Вопрос: Как верстать адаптив при масштабе >100% (на 2к мониторе)?

Лучший ответ: Масштабирование это функция браузера. Версткой её никак не исправить. Её отключают если очень нужно (а это вредная привычка). Если такая ситуация случается, нужно объяснить это клиенту. Вы можете под него подстроиться, а всех остальных пользователей, которые пользуются 100% масштабом, отравить.
Поэтому мониторы 2к и макбуки с ретиной ничем не хуже. Сохраняйте графику в высоком качестве, а лучше векторную. Или же узнавайте медиазапросами DPI и от этого пляшите.

Худший ответ: У меня 2K-монитор, брал в том числе для изучения всех граблей с масштабированием. Версткой не занимаюсь, к сожалению. Для меня комфортным оказалось нестандартное масштабирование 111%, в большинстве случаев прибавлющее один пункт (pt) к размерам шрифтов, но не всегда. Бо́льшее масштабирование на 2K не имеет смысла, проще уж брать FullHD.
Вопрос: Как распараллелить вычислительно Java-приложение на несколько машин?

Лучший ответ: Я бы как раз использовал Spark или Ignite, чтобы не изобретать велосипед.

Худший ответ: Я конечно не сталкивался на практике но много читал про решения подобных задач и вот пара мыслей:
1) Если все лежит в БД то почему бы не начинать параллелить именно с нее. Скажем в БД (возможно отдельной) метить кто забрал себе данные, дальше ноды цепляются к БД, берут пачку данных и метят что они уже в работе, т.е. нода 2 не возьмет данные которые уже на ноде 1. Это из простых решений в лоб.
2) Все последующие это реализациия в библиотеках, gridgain , штатный RMI,  Apache Ignite, Apache River.