pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: Как работают классовые компоненты в React?

Лучший ответ: Реакт сам создает екземпляр класса и сам вызывает метод рендер, более того он сам вызывает кучу методов жизненного цикла, но я рекомендую пользоваться функциональными компонентами и хуками.
https://reactjs.org/docs/hooks-intro.html#complex-...
1) Потому что Fiber лучше работает с функциональными компонентами.
2) Есть полтора случая на 1000000 когда на функциональном компоненте нельзя реализовать то, что на классовом и все они описаны в официальной документации.
3) В реакте единственное возможное наследование это class Board extends React.Component, все, дальше начинается композиция, и в реакте думать в категориях OOP скорее вредно, чем полезно.
https://reactjs.org/docs/composition-vs-inheritanc...

So What About Inheritance?

At Facebook, we use React in thousands of components, and we haven’t found any use cases where we would recommend creating component inheritance hierarchies.


Поэтому забудьте про class based кмопоненты и сами пишите все на функциональных. А жизненный цикл class based компонент прочитайте внимательно пару (десятков) раз, чтобы запомнить и просто разбираться в чужом коде.

Худший ответ: Это логика, которую обрабатывает движок реакта. Ты просто следуешь абстракциям, которые предоставляет либа. Наследуясь от React.Component ты вызываешь метод render, который реализован в базовом классе React. Далее тебе не нужно у каждого дочернего компонента вызывать render, это детали внутреннего исполнения. В данном случае ты просто работаешь с jsx. Чтобы скрупулезно проследить за деталями внутренней реализации - нужно смотреть исходный код.
Вопрос: Один проект или коммерческая разработка?

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

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

Лучший ответ: Если нужно определить кратность - то берем учебник Математика, 6 класс. 
Глава Признаки кратности 3, 5 и 9 с минимумом вычислений.
Если же нужно заполнить массив - то потери времени на его заполнение, да в жабоскрипте, на порядки превышают стоимость этой простенькой проверки. 
Может ускорить (а может и замедлить) этот процесс замена в цикле ++i на прибавление того числа, которое действительно надо прибавить для получения следующего кратного - оно циклично повторяется: [3, 2, 1, 3, 1, 2, 3]. Проверка уберется, но вычислений, на самом деле, только прибавится. Зато без ветвления и пустых циклов.

Худший ответ: Как вариант - cмержить последовательности 3n и 5n
https://jsfiddle.net/0rhsL1ba/

не знаю, насколько это поможет здесь, но будь числа покрупнее, точно бы ускорилось
Вопрос: Почему развалился сайт после обновления хрома до 89 версии?

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

Это явно проблема браузера, так что имеет смысл сообщить о ней разработчикам, написав bug report в их трекер.

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



Здесь видно, что картинка с точки зрения браузера находится в одном месте, а по факту нарисована в другом.

Но именно это позволяет довольно просто найти дешёвый вариант обхода проблемы, без необходимости менять код. Ведь поскольку проблема связана с некорректной отрисовкой - достаточно просто заставить браузер перерисовать соответствующую область, а для этого, в свою очередь, достаточно заставить его поверить что это нужно сделать.

Я подготовил пример, демонстрирующий вариант решения. По сути он сводится к добавлению стиля, который производит визуально почти незаметное изменение стилей, которое, однако, заставляет браузер перерисовать всю область:
.chat-item__content.force-repaint .content-chat-content__message {
    opacity: 0.99;
}
Остаётся только "дёрнуть" CSS класс force-repaint на элементе контейнера - и всё сразу встаёт на место, поскольку осуществляется перерисовка. Например вот так:

function forceRepaintToFixChrome89Issue() {
    if (!navigator.appVersion.match(/\sChrome\/(89|9\d)\./)) {
        // Apply only for Chrome 89 and 90+
        return;
    }
    window.requestAnimationFrame(function () {
        const e = document.querySelector('.chat-item__content');
        if (!e) {
            return;
        }
        const fr = 'force-repaint';
        e.classList.add(fr);
        window.requestAnimationFrame(function () {
            e.classList.remove(fr);
        });
    });
}

В примере я добавил для этого кнопку, но в реальном приложении логично делать это, например, при изменении содержимого контейнера.

Худший ответ: Эти свойства делают блок флекбоксом (display: flex;), содержимое внутри идёт от последнего ребёнка к первому, по поперечной оси  (flex-direction: column-reverse;)
Всё остальное - вендорные префиксы для кроссбраузерности. 

Какому блоку в разметке принадлежат эти свойства? Почему решили, что проблема именно в них?
Вопрос: Как в Linux создать 1 том из двух дисков?

Лучший ответ: backup format restore, используя livecd или консоль восстановления (лучше удобный livecd)

у тебя на выбор lvm, mdadm (рейд 0 - stripe), btrfs/zfs
делать резервную копию временно на новый диск, затем выбираешь любой инструмент (в зависимости от выбора будут требования по разбивке дисков), форматируешь раздел, восстанавливаешь и расширяешь диск.

самое простое использовать btrfs, это файловая система поддерживает онлайн из коробки и добавление/удаление дисков и расширение разделов, в т.ч. raid всех уровней, сжатие на лету, дедупликация (инструменты кстати пока еще не из коробки), бесплатные снапшоты и прочее прочее, поддерживается grub (т.е. не нужно делать /boot раздел) и т.п. (к сожалению efi раздел для secureboot или biosboot для legacy на gpt все еще нужны)

т.е. длелаешь копию на втором диске, затем форматируешь раздел на старом как btrfs, копируешь обратно, добавляешь к первому диску второй раздел команда
btrfs device add /dev/sda1 /dev/sdb1
затем обновляешь grub
grub-install /dev/sda --root-directory=/path/to/mounted/root
p.s. кстати в linux файловые системы можно разворачивать прямо на диске, без создания разделов (но тогда нужен /boot где то разворачивать)

Худший ответ: Для новичка лучше не использовать LVM. Помимо того что это легаси софт она еще и не самостоятельый. Все равно нужно затаскивать конкретные файловые системы. Это создает определенную путацицу и вообще - правильно использовать утилиты lvcreate/vgcreate/pvcreate и не напортачить при этом - большое искусство. Готов спорить что с 1 раза ничего не выйдет.

+1 к btrfs.

Вообще лучше взять какой-то старый диск который не жалко и на нем потренирваться а потом уж на нужных файлах.
Вопрос: Возможно ли поднять kerio на proxmox?

Лучший ответ: У вас, похоже, просто сеть между проксмоксом и остальным не настроена. В целом - если ПО запустилось, ему всё равно, в виртуалке оно или на голом железе.

Худший ответ: Да можно.
Но для этого надо открыть(пробросить) нужные порты в сторону Керио, чтоб локалка их видела
Либо ипользовать режим сети "сетевой мост", по аналогии с VirtualBox
Вопрос: 1-3 ppi в мониторе сильно заметно?

Лучший ответ: Нет, не заметно.
Нет, не влияет.

Худший ответ: Ppi - это пикселей на инч. 
Если у них идентичные физические размеры экрана и идентичные рабочие разрешения, то хз как у них может быть разный ppi. Мб вообще ошибка округления.

А влияет ли для тебя: если ты сможешь определить разницу в один пиксель из 90 на участке размером 2.5 см - то да, иначе нет.)
Вопрос: SQL запрос для выбора несовпадения?

Лучший ответ: LEFT JOIN и IS NULL

Худший ответ: -- Используя WHERE NOT EXISTS
SELECT * 
FROM QEEN
WHERE NOT EXISTS (
	SELECT ID FROM QEEN REVERSE_QEEN WHERE REVERSE_QEEN.A = QEEN.B AND REVERSE_QEEN.B = QEEN.A
);

-- Используя LEFT JOIN
SELECT QEEN.* 
FROM QEEN
LEFT JOIN QEEN REVERSE_QEEN ON REVERSE_QEEN.A = QEEN.B AND REVERSE_QEEN.B = QEEN.A
WHERE REVERSE_QEEN.ID IS NULL;

-- Просто извращение, но тоже должно работать :)
WITH ALL_QEEN AS (
	SELECT ID, A, B, 1 T FROM QEEN
  	UNION ALL
  	SELECT ID, B, A, 2 T FROM QEEN
) SELECT 
	MIN(ID) ID, A, B
FROM ALL_QEEN
GROUP BY A, B
HAVING COUNT(*) = 1 AND MIN(T) = 1;

Test SQL queries online
Вопрос: Как получить максимальное значение в sqlite с именем пользователя?

Лучший ответ: Не факт что эта строка - единственная... Поэтому как-то так:
SELECT * FROM db WHERE ochki=(select max(ochki) from db)

Худший ответ: Попробуй этот код:

SELECT * FROM db LIMIT 1;
Вопрос: Как переключить на windows 10 клавишу fn на стационарном ПК?

Лучший ответ: Так если сами HP говорят, что никак, то уж наверное и правда, что никак. (там в конце ссылка на частичное решение через Autohotkey)
https://h30434.www3.hp.com/t5/Desktop-Hardware-and...

Худший ответ: У меня ноут HP чего то там. Тоже F1 и т.д. работали через fn или наоборот, не помню. Ну в биосе есть такой пункт, отключить эту шляптрамбонию.
Вопрос: Как распознать криво порезанную строку?

Лучший ответ: $isValidUTF8 = ! (false === mb_detect_encoding($string, 'UTF-8', true));

Так же если json_encode() вернула false можно посмотреть json_last_error() и сравнить код ошибки с константой JSON_ERROR_UTF8

Худший ответ: А что mb_substr использовать религия не позволяет?
Вопрос: При записи на флешки, они переводятся в read-only. Что делать?

Лучший ответ: Всё приводило к одному и тому же результату - в конце записи приложение "Диски" обнаруживало, что на них стоит readonly.
Так и должно быть.

Худший ответ: Попробуйте банально rufus`ом развернуть. 
По мне BalenaEtcher из разряда садо-мазо. Примитивную программу сделать на Electron`е это что-то из области извращения
Вопрос: Как развернуть AD на хостинге?

Лучший ответ: Арендовать машину
развернуть винду
настроить AD как обычно
мучиться с лицензиями
мучиться с тем что AD висит где то в инете, а не в локалке

AD Должна быть в локальной сети, но либо через ВПН. Хотя бы потому, что выносить винду голой попой в инет это неправильно

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

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

Всё это деление условное, это видение разработчика. Можете поставить все галки - ничего не сломается. Но зачем человеку, который занимается в организации кадрами и зарплатой информация о клиентах? Как минимум лишняя, а возможно ему и не положено её видеть!

Худший ответ: И что я должен из этого понять? 
задай вопрос автору данного курса.

обратись к превоисточнику:
https://its.1c.ru/db/pubdevguide83/content/27/hdoc...
https://its.1c.ru/db/v8std/content/543/hdoc/_top/п...
Вопрос: Как правильно пробросить порт на Mikrotik для пользователей VPN L2TP+IPSEC?

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

Худший ответ: Без добавления маршрутов "вручную" (или каким-нить топорным способом вроде RIP) здесь не обойтись. Ну или пускать весь трафик через роутер (использовать как шлюз по-умолчанию).

Всего этого геморроя можно было бы избежать, если изначально правильно планировать адресное пространство, в частности для локальной сети и VPN клиентов использовать сети из диапазона 10.0.0.0/8, например рабочая сеть 10.10.10.1/24, VPN 10.10.100.1/24 и т.п. То есть в вашем случае, просто перенастройте "локалку" и все VPN клиенты смогут подключаться без добавления маршрута и со снятой галкой "использовать шлюз по умолчанию для удаленной сети".
Вопрос: Можно ли по коду программы определить кто создала программу?

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

Худший ответ: Если Вы (вдруг) интересуетесь в контексте СПО или высшей школы, то преподаватель IT-дисциплин (если у него есть такая цель) в большинстве случаев на раз-два определит, кто автор решения в рамках группы/курса/факультета, потому что именно через него проходит огромное количество таких работ. Но это возможно тогда, когда работа выполнена не представляющим её студентом, что определяется и по другим косвенным признакам.
Вопрос: Авто-обновление сертификатов Windows 7 SP1?

Лучший ответ: О каком обновлении вины 7 вы говорите?
Её уж много лет как не поддерживают...
Или я чего-то пропустил?

Худший ответ: Нужно установить KB3177467 и KB3172605.

Выяснил опытным путём.
Вопрос: Какие ресурсы по веб-программированию лучше учить после прочтения книги Дакетта «HTML и CSS»?

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

Худший ответ: Самый лучший способ выучить верстку, это найти в интернете бесплатный макет (шаблон) дизайна в figma или любом другом редакторе и пробовать его сверстать. Что непонятно - гуглить. На практике всё учится намного быстрее и эффективнее.
htmlbook тебе в помощь.
Вопрос: Что если установить программу не в корень диска C:\?

Лучший ответ: Вы можете даже на диск Д в Програм Фаилс поставить. Разницы 99% случаев никакой.
Также вирусам без разницы в какой директории находиться.

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

Лучший ответ: Тема более чем заезженная. Определяете сколько хотите получать в месяц при определенной занятости (в часах). Делите сумму на часы - получаете стоимость часа. Считаете сколько потратили на работу и умножаете на стоимость вашего часа. Все просто?
Не бойтесь называть цену! Иначе будете работать за доширак и этим будут пользоваться.

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

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

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

Лучший ответ: Нидерланды, Швейцария, Финляндия, Румыния

Худший ответ: Голландия, Нидерланды то бишь. Порно разрешено :)
Вопрос: Почему PIL выдает 4 rgb вместо трех?

Лучший ответ: R, G, B и A - alpha-канал, прозрачность.

Ещё замечание. Картинка в формате PNG, а не JPEG. Посмотри заголовок, там чётко это видно.
Поэтому второй картинке тоже надо дать расширение .png, как и первой

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

Лучший ответ: Я нашел. Фигма подставляет Open Sans

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

Лучший ответ: Самое сложное - собрать обратно :)

А вообще пока не раскрутите и не увидите начинку вживую - неизвестно.
Ну или по модели найдите фотографии разобранного девайса. Возможно, будет обычный акб на проводках, который куда-то приклеен. Задача отсоединить пару проводов, вытащить старый АКБ, взять новый, подключить и зафиксировать, что бы не гремел.

Значительно более емкий АКБ, скорее всего не влезет. Контроллер заряда можно не трогать, просто будет дольше идти заряд (сомневаюсь, что там что-то умное стоит, что увидит разницу между условно 400 мАч и 800 мАч).

В общем - сначала разберите, а там будет видно, что можно сделать.
Или найдите по модели информацию, что внутри.

Худший ответ: Сначала разбираем, смотрим что нам нужно. Потом ищем на Алике или в местных магазинах. Узнаем, что купить новый выйдет на 30% дороже, чем ремонт. Покупаем новый геймпад.
Вопрос: Проверить наличие элемента в json?

Лучший ответ: Сделай свойство Nullable и если оно будет null, значит значение не пришло совсем. Думаю, это самый простой вариант, если тебя не устраивает значение 0 по умолчанию для типа int, которое будет таковым, если даже не пришло значение того свойства.

public class Competitive
{
    [JsonProperty("CurrentSeasonGamesNeededForRating")]
    public int? CurrentSeasonGamesNeededForRating { get; set; }

    [JsonProperty("SeasonalInfoBySeasonID")]
    public object SeasonalInfoBySeasonID { get; set; }
}

Худший ответ: Как то так встроенные типы инициализируются значениями по умолчанию, сложные null
if (desirialize.QueueSkills.competitive.CurrentSeasonGamesNeededForRating >0){
// обьект содержал значения
}

Или просто проверка https://docs.microsoft.com/ru-ru/dotnet/api/system...
Вопрос: Как обнулить IP адрес?

Лучший ответ: Посмотрите получше - вам плямо белый динамический адрес выдают или нет?

Зачастую для серых динамических адресов существует в качестве внешнего ip определенный шлюз. 

Покажите командой ipconfig нам ваш IP внутри локальной сети роутера, потом покажите нам настройки DHCP, которые получил роутер (В роутере обычно графа "Информация о подключении"), затем сделайте трассировку до гугла:
tracert 8.8.8.8

Очень вероятно, что вашему целому району даётся одинаковый адрес через NAT провайдера, и у вас вообще вряд ли будет меняться внешний IP.

Пишу, как бывший инженер в местном интернет-провайдере. У нас для серых PPPoE было штук 15 точек выхода (внешних IP) а абонентам раздавались локальные, типа 10.0.2.20 и т.д.

Худший ответ: Если тебя банят это у тебя или ненормальная активность в твоей домашней сети(для примера на работе у меня под от50 до 100 пользователи одновременно пользуются интернетом на одном IP и на капчу дай бог раз в месяц кто попадает) или никакого белого адреса тебе не дают и ты сидишь с кучей соседей по сети на этом адресе.
Мне вот провайдер точно динамически белый адрес выдает, и я за 10 лет всего пару раз попадал на капчу.
Вопрос: Как убрать фрагмент переменной?

Лучший ответ: msg = "/code Hello World"
result = a.split(' ', 1)[1]
print(result) # Hello World

msg = "/code Hello World"
tokens = a.split(' ')
cmd = tokens[0] # Возможно, после split надо будет ещё разобрать строку
args = tokens[1:] # Тогда будет полезно разбить всю строку на отдельные слова
result = ' '.join(args) # Но вообще это лишняя работа
print(result) # Hello world

Худший ответ: a = 'abc'
a.replace('a', '')
вам хотя бы основы выучить
Вопрос: Чем отличается асинхронность с одним потоком от многопоточности на одноядерном процессоре?

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

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

На каждый вопрос одинаковый ответ: "Тем, что это разные вещи".
Всё равно что спрашивать "Чем отличается автомобиль от хлеба?" Ответить на такой вопрос можно, но долго и бессмысленно.

Ты в кучу кидаешь потоки процесса и потоки процессора и пытаешься их сравнивать
Вопрос: Как ускорить запись массива в БД sqlite на unity?

Лучший ответ: Делать один запрос, а не 50 тыщ. 
Компонуй запросы в один через точку с запятой. 
Хотя бы по 100 строк.
Перед выполнением запросов начинай транзакцию
После - завершай

Худший ответ: Вставляйте блоками к примеру по 100 элементов (размер блока подберете экспериментально): 
insert into Main (Name, LongCode, ShortCode, Price) values 
(1,1,1,1),
(2,2,2,2),
-- --------
(100,100,100,100);
Вопрос: Какой выбрать движок для информационного портала в 2021 году?

Лучший ответ: самый лёгкий - wordpress 
не хуже - max Site

Худший ответ: Посмотрите Headless движки https://jamstack.org/headless-cms/
Вопрос: Под каким пользователем работают ваши контейнеры?

Лучший ответ: Рекомендуется использовать не-root пользователя
https://sysdig.com/blog/dockerfile-best-practices/

Еще есть сканеры уязвимостей в образах Docker.

Но на практике многим начихать на безопасность. Так что вы хотя бы постарайтесь приложить минимальные усилия.

Худший ответ: Дмитрий, а где в Кубернетесе описываются такие политики? Можно пример yaml файла?
Вопрос: Программист, кодер, девелопер (разработчик): сходства и отличия этих ролей?

Лучший ответ: Чем разработчик отличается от программиста ?
Coder vs. Developer vs. Engineer — а какой Job Tit...
Чем разработчик от кодера отличается
Кто такой кодер? и чем он отличается от программиста?
Классификация разработчиков по рангам боевых искусств
Ранги разработчиков - не совсем по теме, но тоже интересно.
IT-словарик для не-айтишников

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

Лучший ответ: 1. Научиться писать на питоне.
2. Написать окошко, которое будет запрашивать ключ и проверять его.

Худший ответ: def Название(ключ):
    ответ = input("Ведите ключ")
    if ответ == ключ:
        Функция()
    else:
        input("Неверный ключ")
Вопрос: Как измерять заряд аккумулятора на Wemos D1 mini?

Лучший ответ: Если заголовок вопроса дословно скормить гуглу, то первая же ссылка:
https://www.2ram.ru/video/24/

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

Лучший ответ: Открываем список сигнатур и смотрим комбинацию 0x52 0x49 или RI.
Получаем один из трёх вариантов - wav, avi или webp.
А то, что у файла расширение jpeg, так это просто кто-то криво его задал.
Проверяйте тип через mime_content_type, Для JPEG должен возвращаться тип image/jpeg.

Худший ответ: $dir = realpath('./img');

$ext = ['jpeg', 'jpg'];

$fileSPLObjects =  new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::CHILD_FIRST);
foreach($fileSPLObjects as $fullFileName => $fileSPLObject ) {
    if ($fileSPLObject->isFile()) {
        $info = new SplFileInfo($fullFileName);    
        if (in_array($info->getExtension(), $ext)) {
            $image = new Imagick($fullFileName);
            $image->setFormat('webp');
            $image->writeImage('webp:' . $fullFileName . '.webp');
            // тут можно удалить старое, unlink($fullFileName);
        }
    }
}
Вариант через Imagick, плюс покороче