Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как составить план обучения на ближайшиее время?

Лучший ответ:
Добрый день, Дмитрий.
1. В такой последовательности:Python
a) Майкл Доусон - рус ... eng
b) Марк Лутц - рус ... eng 
c) Дэвид Бизли + Лучано Рамальо
Дальше - самостоятельный выбор, исходя из личных потребностей.Django
a) Джейкоб-Каплан Мосс и Адриан Головатый - рус ... eng
b) Django Girls Tutorial
c) Гринфилды + Равиндран
Параллельно читаем Django documentation 
2. HTML5 + CSS3 + JS + SQL. 
Знать на уровне, достаточном для реализации собственного проекта с нуля (скажем, свой сайт). Для этого, правда, достаточно HTML и CSS, в объеме указанных книг. Другой вопрос, что и JS, и SQL практически всегда требуются в багаже знаний при устройстве на работу (достаточно посмотреть вакансии). 
3. Нет, просто нету смысла. Актуальной качественной литературы по Python хватает. Есть некоторые исключения (некоторые из них мною упомянуты), но в целом, повторюсь, с современной литературой у Python все в полном порядке. Ищите на Amazon, сортируя по дате выхода.

Худший ответ:
Смотря что вы хотите. Есть разделение на frontend, backend, database. Есть технологии (фреймворки, библиотеки), лежащие на стыке этих трех "китов". Есть различный инструментарий для работы. Я бы рекомендовал начать ознакомление с web-разработкой с основ: HTML, CSS, базовый JavaSript. Попутно нужно читать про различные протоколы (в основном, интересуют транспортные: HTTP, UDP, FTP). Как работает браузер, сервер, какие спецификации сейчас в ходу. Затем начните изучать серверную сторону вопроса: язык, web сервер, деплой приложения. Можно также начать изучать основы Баз данных: на уровне создания/редактирования/удаления таблиц/процедур, добавления данных. Получив базовые знания, можете начинать изучать библиотеки/фреймворки на стыке технологий. Здесь такое раздолье, что даже изучая какую-то одну вещь вы можете никогда не изучить ее до конца по ряду различных причин.
Вот я лично сейчас изучаю такой стек:
HTML, CSS, Javascript
Jquery(Javascript), Bootstrap(Javascript+CSS), LESS(препроцессор CSS)
C#, MVC (паттерн), Entity Framework (DB+C#, ORM)
MS SQL, ORACLE (DB)
Из инструментов: Git/SVN, VS 2013, Notepad++, Photoshop.
В-общем, сначала база, алгоритмы, потом библиотеки/фреймворки. Если начать с фреймворков, то все равно рано или поздно вы вернетесь к "а как же эта штука работает?"...
Вопрос: Где купить стартовый набор для обучения?

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

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

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

Худший ответ:
Рекрутеры EPAM'а и Luxsoft'а сообщали что у них так можно. Хороший план расписал Andrei Smirnov в комментарии выше.
Вопрос: Можно ли настраивать обычный скайп через GPO?

Лучший ответ:
https://download.skype.com/share/business/guides/s...
страница 16 п 2.4.2

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

Лучший ответ:
https://dimon.navalny.com/static/js/script.fbb501e... 
смотреть с 438-500 строки отвечают за глаза// Глаза

var head = document.querySelector('.head');
var eyeLeft = document.querySelector('.eye--left');
var eyeRight = document.querySelector('.eye--right');

var x_coef = 5.0;
var y_coef = 3.5;

// для мобильных другие радиусы вращения глаз
if (!window.matchMedia('(min-width: 768px)').matches) {
  x_coef = 3.5;
  y_coef = 3;
}

var doc = document.documentElement;

function onMove(e) {
  var r, dist, y, x1, y1, x2, y2;

  x2 = e.clientX;
  y2 = e.clientY;

  // учет положения скролла
  // var left = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);
  var top = (window.pageYOffset || doc.scrollTop)  - (doc.clientTop || 0);

  // левый глаз

  x1 = eyeLeft.offsetLeft + 22;
  y1 = eyeLeft.offsetTop + 80 - top;

  dist = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
  r = Math.atan(dist/20);

  var x_l = ((r * x_coef * (x2 - x1)) / dist);
  var y_l = ((r * y_coef * (y2 - y1)) / dist);

  // правый глаз

  x1 = eyeRight.offsetLeft + 22;
  y1 = eyeRight.offsetTop + 80 - top;

  dist = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
  r = Math.atan(dist/20);

  var x_r = ((r * x_coef * (x2 - x1)) / dist);
  var y_r = ((r * y_coef * (y2 - y1)) / dist);

  // по вертикали беру среднее значение
  y = (y_l + y_r) / 2;

  // коэффициет независимости подвески зависит от расстояния
  // var indep_coef = 1.0 - 1 / (dist/10 + 2);
  var indep_coef = 0.8;

  var x_l1 = indep_coef * x_l + (1 - indep_coef) * x_r;
  var x_r1 = indep_coef * x_r + (1 - indep_coef) * x_l;

  eyeLeft.style.transform = "matrix(1, 0, 0, 1," + x_l1 + "," + y + ")";
  eyeRight.style.transform = "matrix(1, 0, 0, 1," + x_r1 + "," + y + ")";

}
Сами глаза:
правый https://dimon.navalny.com/static/img/head/small/ey...
левый https://dimon.navalny.com/static/img/head/small/ey...
P.S. комментарии к коду прекрасны)

Худший ответ:
Поздновато он сайт опубликовал, я как раз искал такие глаза, измучился, в итоге пришлось сделать так. 
Кому интересно, вот еще недавно пример нашел: https://two.js.org/examples/renderers.html
Вопрос: Как сделать так, чтобы страницу под попапом нельзя было прокрутить?

Лучший ответ:
Такой вот экзотический вариант.

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

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

Худший ответ:
Смотрите в сторону node.js для бекенда (и фреймворка express) и в сторону react, vue, angular для фронтенда. Есть неплохая связка MEAN
Вопрос: Установка Linux на DVD приставку?

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

Худший ответ:
Теоретически - возможна. Практически жуткий геморрой. Особенно на непонятного зверя "DVD-приставка"
Вопрос: Python — Рекурсивный поиск по строкам и файлам?

Лучший ответ:
Читать документацию по функции стандартной библиотеки os.walk()

Худший ответ:
Дмитрий Евгений 
в общем вот что придумал, но не работает) 
Собираю имена файлов с расширением txt в файл и записываю построчно каждое имя в файл.def filebasedir():
    filetodir = os.walk('.')
    tempfile = open('tempfilebase.txt', 'w')
    for line, dirs, files in filetodir:
        for f in files:
            if f.count(".txt"):
                tempfile.write(f+"\n")

filebasedir()
Далее пытаюсь произвести поиск обойти по очереди все файлы и все строки в них.def search_all_data():
    result = open(("TESTRESULT.txt"), 'w')
    allopenfile = open('tempfilebase.txt', 'r')
    for linenamefile in allopenfile:
            linenamefile = open(linenamefile)
            print (linenamefile)
            dataonefile = linenamefile #.readlines()
            for data in dataonefile:
               if data.count("root"):
                   result.write(data)

search_all_data()
В итоге получаю ошибку Traceback (most recent call last):
  File "test.py", line 34, in <module>
    search_all_data()
  File "test.py", line 27, in search_all_data
    linenamefile = open(linenamefile)
FileNotFoundError: [Errno 2] No such file or directory: '111.txt\n'
я так понимаю он не может найти файл 111.txt\n из за того что справа отступ \n?
в общем как это дело исправить? подскажите? второй день только изучаю питон
Вопрос: Где учиться веб-разработке?

Лучший ответ:
В документации
Дополню список:
stackoverflow, qna.habr, habr, смотреть на даты, что бы понимать, что информация актуальна

Худший ответ:
Дома.
Покупаете книгу страниц на 700+ и изучаете.
Выбирать следует так:
открыть книгу где-то по срединке, прочитать один абзац, если вообще не ясно о чем, книга - она вам не подходит, ищите следующую. Обращайте внимание на год издания и версию языка, старое учить не имеет смысла так как к моменту, когда вы это изучите оно уже будет не совсем актуально.
Вопрос: Ресурсы по современному C++?

Лучший ответ:
Самое очевидное — en.cppreference.com/w

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

Лучший ответ:
Документацию не читай, вопросы задавай :)
https://www.advancedcustomfields.com/resources/ord...

Худший ответ:
Я так понимаю что надо сделать так чтоб посетитель сам мог выбирать сортировку. Этот вид сортировки работает с плагином wp-pagenav
В functions.phpfunction wp_sort() {
  if ($_GET["sort"] != NULL) { 
    $sort = $_GET["sort"];
    setcookie("sorting", $sort);  
  } 
}
В category.php<?php wp_sort(); ?>

<?php $pageNum=(get_query_var('paged')) ? get_query_var('paged') : 1; ?>
<form action="<?php echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; ?>" method="GET" >
	<span>Сортировать по цене: </span>
	<input type="hidden" name="cat" value="<?php the_category_ID(); ?>">
	<input type="hidden" name="paged" value="<?php echo $pageNum; ?>">
	<input type="radio" id="sort_asc" name="sort" value="asc" onchange="this.form.submit()"><label for="sort_asc">По возрастанию</label>
	<input type="radio" id="sort_desc" name="sort" value="desc" onchange="this.form.submit()"><label for="sort_desc">По убыванию</label>
	<input type="radio" id="sort_none" name="sort" value="none" onchange="this.form.submit()"><label for="sort_none">Сбросить фильтр</label>
</form><?php 
	if($_GET["sort"] == NULL) {
		$args['order'] = $_COOKIE["sorting"];
	} else {
		$args['order'] = $_GET["sort"];
	}		
		$args['cat'] = the_category_ID();	
		$args['orderby'] = 'meta_value_num';
		$args['meta_key'] = 'price';
		$args['paged'] = get_query_var('paged');
		$the_query = new WP_Query( $args);
	?>
<?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

 <!-- Тут твой шаблон записи -->

<?php endwhile;
	else:
		echo 'страница не найдена';
	endif;
?>
Это мой вариант пользовательской сортировки
Вопрос: Как с помощью нативного php расширения защитить свои наработки на php?

Лучший ответ:
Общий ответ - никак. Потому что неотламываемой защиты нет, есть скорость взлома. Если Ваш проект коммерчески успешен и приносит большой профит (то есть такой, который будет заведомо больше стоимости взлома) - отломают все, что бы Вы ни пристроили, тем более в PHP, где способов защиты не так уж и много. Да и ставить себе на сервер непонятно что за модуль я не стал бы.
Здесь надо немного взглянуть глубже, убить в себе ИТ-шника и поглядеть на задачу глазами бизнеса. Ведь защита Вам нужна не сама по себе, а чтобы не тырили, а покупали, то есть ради обеспечения профита с разработки. Вот и задумайтесь - а можно ли обеспечить профит другими способами? OnYourLips дал Вам замечательный совет. Почему становится таким популярным SaaS? А потому что так значительно проще защищать свои наработки - ведь они никуда не уходят :) Более того, ты можешь и свои условия клиенту диктовать, как только популярность наберешь, и его данными втихушку разжиться - не для того чтобы использовать, конечно - за это и огрести можно, а просто поржать.

Худший ответ:
Общий ответ - никак. Потому что неотламываемой защиты нет, есть скорость взлома. Если Ваш проект коммерчески успешен и приносит большой профит (то есть такой, который будет заведомо больше стоимости взлома) - отломают все, что бы Вы ни пристроили, тем более в PHP, где способов защиты не так уж и много. Да и ставить себе на сервер непонятно что за модуль я не стал бы.
Здесь надо немного взглянуть глубже, убить в себе ИТ-шника и поглядеть на задачу глазами бизнеса. Ведь защита Вам нужна не сама по себе, а чтобы не тырили, а покупали, то есть ради обеспечения профита с разработки. Вот и задумайтесь - а можно ли обеспечить профит другими способами? OnYourLips дал Вам замечательный совет. Почему становится таким популярным SaaS? А потому что так значительно проще защищать свои наработки - ведь они никуда не уходят :) Более того, ты можешь и свои условия клиенту диктовать, как только популярность наберешь, и его данными втихушку разжиться - не для того чтобы использовать, конечно - за это и огрести можно, а просто поржать.
Вопрос: Кнопка сохранить. Как остаться на той же странице, на которой сохраняешь данные?

Лучший ответ:
1) href в кнопке лишний атрибут
2) за адрес перехода отвечает атрибут action тега form, если оставить его пустым по умолчанию страница будет делать субмит на текущий урл.
3) если задача именно не покидать текущую страницу, тогда отправлять данные Аяксом.

Худший ответ:
Использовать AJAX.
Вопрос: В каких годах человечество перешло из «века механики» в «век электроники»?

Лучший ответ:
Посмотрите в Википедии - электронная лампа

Худший ответ:
Найди в интернете, а лучше купи книгу Инноваторы - Уолтера Айзексона
Вопрос: Почему ожидание завершения потока называется join?

Лучший ответ:
Почему ожидание завершения потока называется join?
Eсли бы слово fork не было уже занято, создание потока назвали бы fork. fork/join -- прекрасная пара.так сделано во всех языках программирования
Чрезмерное обобщение -- источник абсолютно всех бед.
Так сделано в языках ориентирующихся на POSIX, потому что в POSIX ожидание завершения потока -- это pthread_join. А в других языках сделано по-другому.

Худший ответ:
А вы о каком языке говорите?
Однако, если не привязываться к языку, то у этого названия метода тоже смысл.
Join — в том смысле, что нужно "подключиться" к потоку и дождаться его завершения. Т.е. вы как бы присоединились (join) и изнутри ждете, пока "main loop" не вернет вам код завершения потока.
Вопрос: Какое средство резервного копирования для Ubuntu лучше всего?

Лучший ответ:
Я использую утилиту duplicity уже около 6 лет. Причем как для резервного копирования своего ноутбука, так и для копирования серверов, которые поддерживаю и администрирую.
Она простая, запускается из командной строки, поддерживает шифрование (GPG), бэкапы в определенную папку, на S3, ftp, и т.д. и т.п. Инкрементальное копирование с полным через определенные интервалы, разбиение копий на тома заданного размера.
Настоящий комбайн, при том достаточно простой. Например, вот часть моего скрипта для бэкапа ноута:duplicity \
    --full-if-older-than 3M \
    --volsize 150 \
    --exclude='**/*.pyc' \
    --exclude='**/firefox/*/cache2' \
    --exclude='**/lib/python2.7' \
    --exclude='**/.thumbnails' \
    --exclude='**/.virtualenvs' \
    --exclude='**/.virtualenv' \
    --exclude='**/thumbnails' \
    --exclude='**/.xsession-errors*' \
    --exclude='**/.PyCharm*' \
    --exclude=/home/jmv/.Private \
    --exclude=/home/jmv/.ecryptfs \
    --exclude=/home/jmv/.cache \
    --exclude=/home/jmv/.macromedia \
    --exclude=/home/jmv/.adobe \
    --exclude=/home/jmv/.nvm \
    --exclude=/home/jmv/.local/share/zeitgeist \
    --include=/etc \
    --include=/home/jmv \
    --exclude='**' \
    / $DEST

duplicity remove-older-than 12M --force $DEST

Худший ответ:
Из платного посоветовать могу acronis. Оч хорошая вещь.
Вопрос: Как в laravel вывести данные без foreach во view?

Лучший ответ:
Если в Settings одна запись всегда, то Settings::first() вернет первую (и единственную) запись.

Худший ответ:
Если в Settings одна запись всегда, то Settings::first() вернет первую (и единственную) запись.
Вопрос: Телеграмм API, кинуть картинку ссылкой, но ссылку не показывать, как?

Лучший ответ:
Просто заверните картинку в тег <a>, добавив &#8203; как текст. Тогда картинка будет отправлена без видимой ссылки:bot.send_message(id, '<a href="IMG_URL">&#8203;</a>', parse_mode="HTML")

Худший ответ:
Заверни картинку в ссылку . И отправляй как текст с параметром parse_mode = "HTML".
text ='<a href="https://pp.userapi.com/c841220/v841220591/667c8/16VMgxEjb94.jpg" >Любое название </a>'
Вопрос: Почему на некоторые сайты не получается зайти по ip?

Лучший ответ:
На одном IP может быть много доменов. Все они определяются веб сервером.
Когда мы отправляем http запрос на toster.ru то мы подключаемся к айпи адресу, и в заголовке host передаем доменное имя, веб сервер ищет конфиг который подходит под это доменное имя и и передает управление этому конфигу.https://nginx.org/ru/docs/http/server_names.html
Когда же мы подключаемся по айпи адресу, то в заголовке host передается айпи адрес, сервер не может найти конфиг для этого хоста и запускает дефолтный со страничкой nginx.

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

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

Худший ответ:
Мне советовали хранить изображения в storage (внезапно)
А в БД вносить путь к ним
Вопрос: Возможно ли сканировать QR-код или 1D-код средствами браузера для веб-разработки?

Лучший ответ:
В дополнение к ответу Антона: https://www.html5rocks.com/ru/tutorials/getusermed....

Худший ответ:
А есть у кого вариант для сканирование штрих-кодов, а не QR-кодов?
Вопрос: В чем подвох неограниченного места на хостинге?

Лучший ответ:
Маркетинговая замануха. Закачайте 1-2 ТБ на хостинг, потом поговорим.

Худший ответ:
подвох в скорости, она низкая
Вопрос: Взлетает latency SSD на массиве под ESXi, куда копать?

Лучший ответ:
Ну это вполне нормальная ситуация.
Чего вы хотите от потребительского SSD в RAID?
Не удивлюсь если там еще и over provisioning не настроили.Диски заняты менее, чем наполовину. Шутите?
У вас RAID, а это значит, что TRIM не работает.
Вы файл удалили - а на диске он так и остался.
В итоге диск с неработающим TRIM всегда занят на 100%.
А вы говорите на половину.

Худший ответ:
Попробуйте софтовый рейд , оно намного веселее
Вопрос: Где увидеть throw new?

Лучший ответ:
Здесь никак не увидеть, поскольку написан бред и оно не сработает, обычно что-то из двух, либо оно не обработанное и будет логировано в консоли в DevTools и функция не будет дальше выполняться, либо если есть try..catch и throw находится в блоке try, то сработает ветка catch и функция продолжит выполнение.

Худший ответ:
Это исключение никогда не сработает. Т.к.  условие !x == 20 никогда не выполнится. Потому что !(13) === false
Вопрос: Wordpress. Подключение защищено не полностью. Как решить?

Лучший ответ:
У вас так происходит, потому что вывод ссылок в html идет по протоколу http:// (просмотрите исходный html-код и поиском пройдитесь по http://, все ссылки там у вас загружаются по http, а нужно по https), поэтому получается такая ситуация. Нужно чтобы система генерировала ссылки по https. Это касается всего, — ссылки для подключения css, js. Ссылки, в контенте, которые уже берутся из бд.
В этом случае, в шаблоне вашего сайта, если прописаны абсолютные url, советую заменить http на https. Если используете по всюду функции вывода из бд, тогда надо менять в бд. Но лучше попробуйте такой код (если у вас сайт на wordpress). Еще есть встроенная функция, определяющая, какой протокол использует веб-сервер, для отдачи страниц, — is_ssl( ).
В файл functions.php вставьте:add_filter('the_content', 'replace_url_to_https', 30);
function replace_url_to_https($text)
{
    $text = preg_replace('~http(://(?:www.)?' . preg_quote($_SERVER['HTTP_HOST']) . ')~', 'https\1', $text);
    return $text;
}
Вроде это должно помочь.
Еще можно запросами к бд попробовать, тогда и код выше не понадобится:UPDATE wp_options SET option_value = replace(option_value, 'http://site.ru', 'https://site.ru') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://site.ru', 'https://site.ru');

UPDATE wp_posts SET post_content = replace(post_content, 'http://site.ru', 'https://site.ru');
Тут site.ru — ваш домен подставляете. Все абсолютные пути в базе станут с https
А везде, где ссылки выводятся не через бд, а напрямую хардкорно прописаны где либо http, замените на https://

Худший ответ:
Mixed content problem. можно решить как советует уважаемый Роман Жариков. Можно пофиксить (на самом деле то же самое внутри почти), установкрй и активацией плугина вроде Fix non-SSL links.
Вопрос: Задачи frontend разработчика?

Лучший ответ:
Но я просто из интереса смотрел. 
Я проходил мимо курсов вождения и заглядывал в окно, дайте мне праваПрограммирование не является смыслом моей жизни и постигать все уголки данной сферы не хочу, тем не менее склонность что то посмотреть, разобраться есть, но без четких целей, что приближает пользу от стараний к нулю.
Тогда зачем?да и было это на yii2
а что не так с yii2?Если есть желание, напишите краткий план, что нужно, а на что можно не тратить время,
Вы вначале определитесь кем хотите быть, потом загуглите, таких списков просто тьма в интернете.

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

Лучший ответ:
Добрый день.
Всё, что Вам нужно изложено здесь, а ещё здесь.

Худший ответ:
В Yii2 запрос можно выполнить тремя способами. В том числе и напрямую если уверенны в безопасности.$connection = Yii::$app->getDb();
$command = $connection->createCommand("
SELECT products.id as my_product_id, products.name as my_product_name, stranik as page_numbers, group1 AS cost,
group_concat(bb.name) AS book_binding_name,
group_concat(bl.name) AS book_format_book_name
FROM products,product_book 
LEFT JOIN book_binding bb ON book_name = :book_binding: AND bb.id = product_book.book_id
LEFT JOIN book_format_book bl ON book_name = 'book_format_book' AND bl.id = product_book.book_id
LEFT JOIN prices ON prices.product_id = 'ПЧ9'
WHERE products.id = :artikul and product_book.product_id = products.id group by products.id
", [':artikul' => 'ПЧ9', ':book_binding' => 'book_binding', ]);

$result = $command->queryAll();Подробности