Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как получить отдельное значение из def'a?

Лучший ответ:
Прочитать хотя бы начало любого учебника, а потом применить полученные знания для того, чтобы использовать операцию взятия элемента по индексу: print(get_info_by_name(name)[0])

Худший ответ:
1) Сделайте через
if choose == "1":
    ....
elif choose == "2":
    ....
else:
    pass

2) Если речь идет о получении значений, то ваша функция возвращает 3 значения, значит в 3 переменных и впихните
a,b,c = get_info_by_name(name)
Вопрос: Стоит ли работать под руководством человека, который все переделывает на свой лад?

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

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

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

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

Лучший ответ:
У пользователя нет прав на удаление файлов. Попробуйте через sudo.
Либо по какой-то причине раздел примонтирован как readonly.

Худший ответ:
ls -la /data/backups в студию
Вопрос: Хорош ли такой шаблон работы с AJAX?

Лучший ответ:
проще так
https://learn.javascript.ru/fetch

let response = await fetch(url);

if (response.ok) { // если HTTP-статус в диапазоне 200-299
  // получаем тело ответа (см. про этот метод ниже)
  let json = await response.json();
} else {
  alert("Ошибка HTTP: " + response.status);
}

Худший ответ:
Это уже архаизм, к тому дикий велосипед. Зачем 100500 раз опять пытаться писать сырую обертку над XMLHttpRequest? Берите fetch или какую то стороннюю библиотеку, если там надо что то, чего у fetch нету (типа прогресса upload) и вперед.
Вопрос: Почему возвращает число из базы в строковом виде?

Лучший ответ:
версия какая?
UPD: скорее всего юзается разный драйвер, гуглите в сторону mysqlnd(для поддержки типов он должен быть установлен), на предмет наличия этого драйвера запускайте php -i и смотрите что в разделе пдо драйвера.

Худший ответ:
Troodi Larson, а база одинаковая?
Можно сравнить настроки бд при помощи pt-config-diff и сравнить схему при помощи 
Экспортнуть схемуmysqldump --no-data -u userName -p databaseName > my_schema.sql
и срвнить обычным диффом
Вопрос: Как правильно совместно работать и обновлять ветку master?

Лучший ответ:
Через pull request - это для каждого изменения свою ветку создавать от ветки develop, коммитить и пушить её, и её уже подавать на pull request. Исходные ветки master и develop изменяться вручную не должны, в них добавление происходит путём принятия пулл реквеста теми, кто ответственен за это в проекте.

Худший ответ:
Допустим, когда нужно внести правку:
переходим на ветку develop командой git checkout >
затем git pull, чтобы получить обновления >
затем вносим свои изменения в код >затем git fetch origin master, что-бы притянуть изменения из мастера, если они появились. Затем решить конфликты, если они появились. а потом уже коммит и пуш.

Затем на гитхабе готовим pull request и всё? Дальше основной владелец примет у себя изменения и master обновиться?да

Самому master лучше не трогать?не трогай если не владелец

И можно ли делать так несколько раз подряд, если нужно добавить еще правки?нужно

И если всё же есть разрешение на самостоятельное обновление master, то как переносить изменения в неё из develop? С помощью checkout develop "измененные файлы", добавить коммит и запушить?нет, ужас какой. Надо делать git merge develop, если конфликтов не будет - все коммиты из ветки develop просто подтянутся в мастер и он будет в актуальном состоянии. А еще благодаря мёржам будет видно что куда откуда и кода бралось, а при git checkout ветки не будут связаны.

Как правильно совместно работатьразные ветки себе сделайте для разработки
Вопрос: Какие самые популярные паттерны проектирования в JavaScript?

Лучший ответ:
Copy-Paste.
Именно этот паттерн вам бы следовало применить к вашему вопросу и поисковой строке Тостера, потому что это уже 100500-ый вопрос на тему паттернов в ЖС.

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

Лучший ответ:
Когда начал пользоваться, то подумал, Что почему бы и не прогдвигать linux
Это пройдёт с возрастом. Как только поюзаете в синглбуте годик-два, то поймёте, что это продвигать не надо.
Если же имеется в виду "учить", то вот хорошая подборка книг: https://www.google.com/search?q=%D0%BA%D0%BD%D0%B8...
Кроме шуток, Гугл сразу показывает отличную подборку.

Худший ответ:
по Linux 
zenway.ru
https://losst.ru/
по программированию
https://proglib.io/
https://tproger.ru/
Вопрос: Почему tar в винде распаковывается не так как в линуксе?

Лучший ответ:
Например, потому что для линукса "Файл1.txt" и "файл1.txt" это два разных имени файла, спокойно находящихся рядом, а для винды это одно имя и эти файлы в одной папке находится не могут.

Худший ответ:
Из-за разного подхода к файловым системам в линукс регистр букв имеет значение, в Windows это будет считаться одним файлом. Это в основном 99% проблем совместимости файлов между win и *nix
Вопрос: Как найти ошибку?

Лучший ответ:
Потому что при быстром повторном щелчке вы попадаете не на кнопку, а на созданный ранее div. В обработчик событие попадает из-за всплытия.
Если добавить в функцию console.log(e), то увидим
click { target: div#ele, buttons: 0, clientX: 163, clientY: 119, layerX: 55, layerY: 19 }
click { target: div.one, buttons: 0, clientX: 163, clientY: 119, layerX: 2, layerY: 2 }

Худший ответ:
Добавьте .one {
		animation: 0.5s name;
		width: 5px;
		transform: scale(10);
		height: 5px;
		border-radius: 50%;
		position: absolute;
		background: #fff;
		opacity: 0;
+   pointer-events: none;
	}
Это заблокирует возможность "кликнуть"  на созданный ранее div.
Вопрос: Как написать функции?

Лучший ответ:
Используем CTE:

with cte_orders(row_id, parent_id, group_name) as (
	select row_id, parent_id, group_name from Orders where row_id = @f
  	union all
  	select O.row_id, O.parent_id, O.group_name 
  	from Orders O 
  	join cte_orders on cte_orders.row_id = O.parent_id
) 
select sum(price) total_pice from cte_orders 
left join OrderItems on cte_orders.row_id = OrderItems.order_id ;

T-SQL fiddle

Худший ответ:
Во-первых у вас 4 уровня, а не 3.
Во-вторых, конечно, нужна рекурсия.
Но по колхозному тоже работает:DECLARE @S FLOAT, @ORD INT = 1
SELECT @S = ISNULL(SUM(price),0) FROM OrderItems WHERE (order_id = @ORD)
SET @S = @S + 
  ( SELECT ISNULL(SUM(OrderItems.price), 0) 
    FROM OrderItems 
      INNER JOIN Orders AS P1 ON OrderItems.order_id = P1.row_id
      WHERE (P1.parent_id = @ORD))
SET @S = @S + 
  ( SELECT ISNULL(SUM(OrderItems.price), 0) 
    FROM OrderItems 
      INNER JOIN Orders AS P1 ON OrderItems.order_id = P1.row_id
      INNER JOIN Orders AS P2 ON P1.parent_id = P2.row_id
      WHERE (P2.parent_id = @ORD))
SET @S = @S + 
  ( SELECT ISNULL(SUM(OrderItems.price), 0) 
    FROM OrderItems 
      INNER JOIN Orders AS P1 ON OrderItems.order_id = P1.row_id
      INNER JOIN Orders AS P2 ON P1.parent_id = P2.row_id
      INNER JOIN Orders AS P3 ON P2.parent_id = P3.row_id
      WHERE (P3.parent_id = @ORD))
SELECT @S
В функцию переделаете сами.
Вопрос: Какие коммутаторы выбрать на замену Eltex?

Лучший ответ:
Смотрите в сторону серии HPE Aruba. Это конечно не циска, но я ими доволен.

Худший ответ:
Cisco 2960 есть и с гигабитом. Неубиваемые рабочие лошадки - воткнул-и-забыл. Но при перебросе питания тоже грузятся долго.
Однако, на этот случай есть ИБП, в том числе и родной цисковский девайс, в котором не происходит лишних преобразований напряжения туда-сюда, что экономит батареи.
Вопрос: Как включить видео с youtube поверх всех остальных открытых окон?

Лучший ответ:
Поставить расширение Enhancer for Youtube https://chrome.google.com/webstore/detail/ponfpcno... . 
ИМХО расширение самое полезнейшее из всех для ютуюба, есть блокировка рекламы, скрытые аннотаций, открепление видео плеере, пауза фоновых видео при проигрывании нового, цветовые схемы для ютюба, блекджек и шлюхи.   Можно грабить караваны

Худший ответ:
Поставить расширение Enhancer for Youtube https://chrome.google.com/webstore/detail/ponfpcno... . 
ИМХО расширение самое полезнейшее из всех для ютуюба, есть блокировка рекламы, скрытые аннотаций, открепление видео плеере, пауза фоновых видео при проигрывании нового, цветовые схемы для ютюба, блекджек и шлюхи.   Можно грабить караваны
Вопрос: Как правильно подобрать стойку под сервер?

Лучший ответ:
Из списка подойдет любая с глубиной  не менее 740мм.

Худший ответ:
19" стойка отличается глубиной и количеством юнитов.
Вопрос: Не стартует морда phpmyadmin?

Лучший ответ:
Ясно написано неожиданное многоточие '...'. 
Удалите эту строку из файла!
Должно остаться:
<?php
$cfg['blowfish_secret'] = 'VM8WDi06DqnsHSSMeQamgPRHfYuXNHdX';

Худший ответ:
ну ппц
./config.inc.php:2


...
Вопрос: Хочу записаться на курсы веб дизайнера.Что скажете про яндекс практикум?

Лучший ответ:
 стать лучшим дизайнером на свете? 
Каждый день рисовать дизайн по 7-8 часов, читать книги по дизайну, иметь вкус или хотя бы понятие вкуса. Уметь в Фигма, Фотошоп и Иллюстратор.

Тему курсов по дизайну забыть как страшный сон.

UPD: каждый день заходить на https://www.behance.net/, и тому подобные площадки, дабы учиться у более опытных товарищей умению правильно компоновать объекты, совмещать цветовые решения, либо воровать трендовые вещи. Всё это  = хороший дизайн.

Худший ответ:
Лучше смотрите другие работы и старайтесь что то повторить но не прям все, в конце концов придумаете свое!
Вопрос: Как мне это сверстать?

Лучший ответ:
Вариант 1: блочный

snippet

Вариант 2: более правильный, так как нижние блоки это элемент украшения, и фактически в верстке присутствовать не должны

snippet

Худший ответ:
Почему z-index не работает? Вот тебе вариант с z-index:

.testimonialsContentBottom::after {
    content: '';
    position: absolute;
    top: 100%;
    left: 50%;
    transform: translate(-50%, -50%);
    border-radius: 20px;
    background-color: red;
    height: 90%;
    width: 90%;
    z-index: -1;
}

 .testimonialsContentBottom::before {
    content: '';
    position: absolute;
    top: 100%;
    left: 50%;
    transform: translate(-50%, -50%);
    border-radius: 20px;
    background-color: blue;
    height: 100%;
    width: 80%;
    z-index: -2;
}
Вопрос: Как и где лучше всего раскрутить свой проект OpenSource?

Лучший ответ:
 проектнаписанный на Bash
Пхаха.
Идите на ЛОР, создавайте новость там и наворачивайте в каментах.
ЛОР: linux.org.ru
Новости пишутся, обычно, всеми подряд, но если будут проблемы, можете обратиться ко мне, у меня права точно есть.
Можете на opennet.ru ещё сходить, но там тоталитаризм.

Худший ответ:
другие хабы правилами запрещается это делать.Их никто не соблюдает!
Вопрос: Как «починить» терминал Ubuntu 20.04?

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

Худший ответ:
смотри права доступа директории/файла
/home/sabyr/.fzf/bin: Отказано в доступе
как уже написали выше
"лечи" ~/.bashrc
или возможно что эти PATH записаны в ~/.profile
Вопрос: Я энтузиаст и мне 37 лет, знаю С++, есть неплохие результаты. Стоит ли заниматься программированием игр или уже поздно?

Лучший ответ:
Прекратите считать возраст недостатком. Никому никогда ничего не поздно.

Худший ответ:
Думаю, не составит труда подучить сахар и особенности C# и начать погружаться в Unity. С юнити нетрудно войти в геймдев на полных щах, а не только "после работы для себя пилю игру"
Вопрос: Должен ли front-end уметь верстать?

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

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

Худший ответ:
Должен
Должен, но можно без фанатизма.
Вопрос: Можно ли запатентовать идею?

Лучший ответ:
НЕТ

Худший ответ:
В РФ идеи не патентуются и нет на них авторства.
Вопрос: Какая админка наиболее оптимальна для Symfony?

Лучший ответ:
Которую сам напишешь, та и будет оптимальной.

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

Лучший ответ:
Быстрый поиск всегда осуществляется по индексу - специально подготовленному набору данных, содержащему только ключевые для задачи поиска данные, в сжатом формате, и размеченные определенным образом для быстрого доступа к записи.
Индексы сегодня полностью обслуживают специальные поисковые движки, коих на рынке много. Велосипеды тут не нужны.
Индексов может быть много - так можно изолировать непересекающиеся наборы данных, и избежать больших "общих" индексов.
Если производительности одного сервера не хватает, применяют кластеры - поиск по индексам хорошо поддается кластеризации.
Чтобы обновлять индексы нужно периодически выполнять переиндексацию - вычитывать полный набор данных и заполнять ими индекс. Это очень тяжелый процесс, поэтому обычно его делают редко и в малонагруженное для сервиса время.
Чтобы можно было искать с учетом всяких прав и статусов сообщений, эти права и статусы сохраняются в тот же индекс как атрибуты, и участвуют в поисковом запросе. Так можно персонифицировать поиск.
Чтобы индексы работали как в реальном времени и соответствовали данным приложения, на приложение навешивают хуки: пользователь скрыл сообщение - сработал хук и переиндексировал только одно это сообщение, что практически не дает нагрузки.

Худший ответ:
reindexer ( не нра что в памяти)
manticoresearch / sphinxsearch
тарантул
кликхаус
на крайняк эластик
Вопрос: Как правильно проверить?

Лучший ответ:
а потом у человека окажется две хонды...

стоит пересмотреть структуру ибо есть люди и есть авто, а авто имеет отношение к человеку 
ну и далее - есть марки авто и есть конкретные автомобили одной из марок...

Худший ответ:
Как уже тут замечали, лучше использовать нормальную структуру, где по id пользователя привязываются все нужные типы машины (по 1 на каждую запись), т.е. таблица вида "user_cars(user_id, car)". Тогда можно будет за запрос сразу получить просто список машин пользователя "SELECT car FROM user_cars WHERE user_id = ..."

А при данной структуре можно слить значения в одну "цифровую" строку (и заодно использовать передачу параметров вместо форматирования текста)
cursor.execute(f"SELECT honda||spyder||yamaha||ford||lancer||nissan car_info FROM cars WHERE id2 = ?", (ctx.author.id, ))
В результате запрос возвратит скажем "001010" если у пользователя есть yamaha + lancer. Затем сравнить со списком машин. Например так
# допустим получили такую строку флагов из таблицы
car_flag = "001010"
# список машин в таком же порядке, как столбцы таблицы
cars = ['honda', 'spyder', 'yamaha', 'ford', 'lancer', 'nissan']
# сопоставляем нашу строку флагов со списком машин
user_cars = [car for car, flag in zip(cars, car_flag) if flag == "1"]
print(user_cars)
# ['yamaha', 'lancer']

--
Еще можно использовать названия полей напрямую из запроса через cursor.description, примерно так:
data = cursor.execute(f"SELECT * FROM cars WHERE id2 = ?", (ctx.author.id, ))
for value, name in zip(data, map(lambda x:x[0], cursor.description)):
    if value = 1:
        print(name)
Вопрос: Как убрать перезапись данных в ячейке google sheets?

Лучший ответ:
Если из массива нужна только часть значений, используйте ARRAY_CONSTRAIN(range , rows, columns)
=ARRAY_CONSTRAIN(вашиДанные;1;1)

Худший ответ:
Можно, например, с помощью =split
Если за ценой следует значок рубля, =SPLIT(ячейка;"₽";ИСТИНА); столбцы, куда улетают остальные элементы скрыть. 
Можно с помощью ЛЕВСИМВ (LEFT).
Вопрос: Как перехватить трафик сети в Kali?

Лучший ответ:
Как перехватить трафик сети в Kali?
Снести Kali, поставить винду, вернуть на место майнкрафт и перестать отнимать время у взрослых дядь :)

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

Лучший ответ:
Вы бы хоть погуглили что за файл вы там пытаетесь глянуть:

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

# fizz.py

def greet(who):
    return f'Hello {who}'

Выход находится с помощью стаба: создаешь файл fizz.pyi, который содержит типизированную сигнатуру greet без имплементации:

# fizz.pyi

def greet(who: str) -> str:
    ...
В этих файлах имплементация кода НЕ ПРЕДУСМОТРЕНА.

Худший ответ:
.pyi - stab-файлы, которые нужны только для тайпчекинга и не используются в рантайме.
https://www.python.org/dev/peps/pep-0484/#id44
Вопрос: Какое железо брать по python?

Лучший ответ:
Хилое, чтобы была мотивация делать эффективное и производительное ПО.

Худший ответ:
Многие люди говорят, что земля плоская, и стоит на трех китах. и мне все интересно почему ракеты об небесную твердь не расшибаются.
Вот ноут штука медленная это факт. Для работы лучше десктоп.
Хотя ваша конфигурация для ноута вполне ничего - посмотреть киношку в дороге вполне пойдет.Характеристикы: ОЗУ: 8 GB Intel® Core ™ i3-8130U CPU @ 2.20GHz × 4 GeForce MX150 / PCIe / SSE2 Но работать я бы на нем не стал - медленно, неудобно.
Вопрос: Кто нибудь может объяснить определения?

Лучший ответ:
class Car:
    max_speed = ''  # атрибут от же свойство свойство

    def ride(self, speed, distance):  # метод
        self.distance = distance
        self.speed = speed

car = Car()  # объект, он же экземпляр класса
car.max_speed = 120
car.ride()
Для понимания: объект - это существительное, метод это глагол (что может делать объект), свойства - это прилагательные, описывающие существительное, т.е. объект

Худший ответ:
class A {
   public $name =  123 ; // Атрибут класса 

   public function sayMyName() { // метод
     echo $this->name;
  }

}
$a = new A(); // $a экземпляр класса
Вопрос: Как лучше разрабатывать бэкенд и фронтенд в гите, чтобы они друг от друга не зависели?

Лучший ответ:
Фронт – это один сервис. Бек – второй. 
Должны быть в разных репозиториях.

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

Лучший ответ:
Передача this в конструктор нового класса.class HotKeys
{
     private MainWindow window;
     //Конструктор
     public HotKeys(MainWIndow _window)
     {
          window = _window;
     }
}namespace Toolkits
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
       
        public MainWindow()
        {
            InitializeComponent();
            HotKeys hk = new HotKeys(this);           
        }
    }
}

Худший ответ:
Передача this в конструктор нового класса.class HotKeys
{
     private MainWindow window;
     //Конструктор
     public HotKeys(MainWIndow _window)
     {
          window = _window;
     }
}namespace Toolkits
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
       
        public MainWindow()
        {
            InitializeComponent();
            HotKeys hk = new HotKeys(this);           
        }
    }
}
Вопрос: C# (winform) как засунуть async и await в мой код?

Лучший ответ:
1 - совет - не дергайте сборщик мусора по мелочам. этим вы гарантированно ухудшаете время выполнения. в то же время он и сам великолепно справится, пока вы будете рассматривать результат
2 - осваивайте binding к внешним объектам. Windows Forms DataGridView это умеет https://docs.microsoft.com/ru-ru/dotnet/framework/...
в простейшем случае можете потренироваться на кошечках попробовать массивы/списки (а можно и Entity Framework подтянуть, там есть вариант БД "in memory". но только если есть данные загружаемые из внешних БД, или сохраняемые в БД.. хотя EF уже весь на async/await "из коробки")
3 - binding из бавит вас от рукопашного создания/удаления строк DataGridView. это тяжеловестные операции, учитывая что речь о визуальных эелементах
краткое резюме - binding к массивам/спискам/бд, а их обработка во внешних процессах, или PLINQ.. или async/await - что осилите

Худший ответ:
В вашем случае идет постоянное обновление view, а это UI часть. То есть вынести в отдельный поток нельзя.
Что тут стоит сделать:yourDataGridView.SuspendDrawing();
// обновление ваших полей
yourDataGridView.ResumeDrawing();
И мелкие улучшения:var row = this.dataGridView2.Rows[i]; // чтобы меньше проверки на индекс дергать
row.Cells[0].Value = ...;
Можно бы и конструкции string.Format("{0:0.#############}"... в отдельный поток вынести и уже подготовленные данные внести в GridView
Вопрос: Много маленьких запросов к REST API или один большой?

Лучший ответ:
Если у вас сейчас что-то вроде этого:GET '/posts/slug/'

{
  post: { /* ... */ }
}

GET '/posts/slug/comments/'

{
  comments: { /* ... */ }
}

GET '/posts/slug/comments/users/'

{
  users: { /* ... */ }
}

GET '/posts/slug/author/'

{
  author: { /* ... */ }
}

GET '/posts/slug/meta/'

{
  meta: { /* ... */ }
}
то логично все связанные данные объединить в один запрос:GET '/posts/slug/'

{
  post: { /* ... */ },
  linked: {
    users: { /* ... */ },
    comments: { /* ... */ },
    meta: { /* ... */ },
  },
}

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

Лучший ответ:
Потому что объект существует.
В пхп почти все, что не false, 0, null, [] равно true, если таким образом сравнивать
Если хотите "пожоще", делайте if check() !== false

Худший ответ:
Вот почитайте приведение типов
Вопрос: Разворачивают ли у вас разработчики сервисы локально?

Лучший ответ:
Кто как справляется с этой проблемой?
Мы легко решили для себя эту проблему с помощью двух инструментов:
1. Часть сервисов работает на тестовом сервере, доступном локально
2. Docker
P.S. Разворачивать и обновлять проекты в докере - дело если не нескольких секунд, то минут, не более того. При этом за всю настройку и прочую богадельню связанную с настройками ОС для сервиса, софта и пр. - отвечают авторы самого сервиса, разработчику достаточно скачать/обновить несколько файлов описывающих контейнер(ы) и выполнить 1-2 команды, дальше всё соберётся и поднимется автоматически.

Худший ответ:
Для dev окружения мокаем сторонние сервисы через вайрмок контейнер (rodolpheche/wiremock), при изменениях в api - обновляем моки в соответствии с изменениями.
С частью связанных сервисов общение производится через ивенты кафки - тоже решается моками ответов.
При интеграционных тестах - поднимаются реальные сервисы