pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: Web-сервер G-WAN, кто-нибудь пользуется?

Лучший ответ: andyone.me/post/10124195968/gwan

А секрет быстродействия прост: для выдачи из памяти «Hello world» на простейший http запрос вовсе не нужно 100 тыс. строк кода на Си. А весь остальной функционал веб-сервера с gwan-ом вам ещё только предстоит написать. ;-)

Худший ответ: Когда-то Cherokee так же на картинках «делал маму» 10 раз подряд…
Пока к нему php не привязали, то есть на статических html'ках
Вопрос: Какой язык изучать Android разрабочику?

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

Худший ответ: Если хочешь быть нормальным Android разработчиком, то не надо смотреть в сторону вот этих всех фреймворков. Все просто - изучай Java, а дальше платформу. А если хочешь быть еще и прогрессивным, то начинай учить Kotlin.
Вопрос: В чем суть self?

Лучший ответ: Если кратко и по простому, то дело обстоит так:
Обычно класс создают для того, чтобы потом создать некоторое количество экземпляров этого класса.
При написании класса нужно как-то указать, что какие-то манипуляции нужно производить именно над конкретными экземплярами, а не над самим классом.
Для этого в функциях (кроме некоторых исключений) первым аргументом пишут имя (по традиции это как раз слово "self", хотя на самом деле там можно указать любое корректное имя). В результате, когда в функции интерпретатор видит имя self, он понимает, что речь идёт именно об одном конкретном объекте класса.
Пример:class A:
  
  # У класса есть атрибут "x"
  x = 1
  
  def change_one(self, value):
    # Эта функция меняет атрибут "x" только у того экземпляра класса,
    # для которого она вызвана
    self.x = value
  
  def change_all(self, value):
    # Эта функция меняет атрибут "x" у самого класса
    # Изменение отразится на всех экземплярах, у которых нет своего атрибута "x"
    A.x = value


a1 = A()
a2 = A()
a3 = A()

print(a1.x, a2.x, a3.x)
# Выведет: 1 1 1
# На самом деле, у экземпляров пока нет своего атрибута "x",
# но они получают его значение из класса

a1.change_one(5)

print(a1.x, a2.x, a3.x)
# Выведет: 5 1 1
# Теперь у а1 есть свой атрибут x, потому что функция change_one через self
# создала его только для того экземпляра, для которого её вызвали
# a2 и a3 по прежнему не имеют своего атрибута "x" и получают его значение из класса

a2.change_all(2)

print(a1.x, a2.x, a3.x)
# Выведет: 5 2 2
# Изменился атрибут класса, и поэтому значение изменилось для всех элементов,
# которые не имеют своего атрибута "x", а вынуждены брать его из класса

a1.change_all(7)

print(a1.x, a2.x, a3.x)
# Выведет: 5 7 7
# Совершенно всё равно, из какого экземпляра вы запускаете change_all.
# В этой функции не используется self (в отличие от change_one),
# а значит результат её вызова никак не связан с конкретным экземпляром

Худший ответ: Гвидо где-то утверждал, что это просто соглашение, которое ничего не значит. Но это вроде указателя на экземпляр класса (как this в c++). Просто во всех методах он идет первым аргументом.
Вопрос: Noindex для html карты сайта

Лучший ответ: Для уверенности можете запретить индексацию (noindex), но разрешить переход по ссылкам (follow):

<meta name="robots" content="noindex,follow" />

Автор этих строк, например, делает так применительно к списку заметок блога.

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

Лучший ответ: Очевидно же! Разработка физических движков для компьютерных игр. Куча математики, физики, низкоуровневое программирование, не веб. Всё как вы хотите.

Худший ответ: Если вам серьезно нравится физика, то можно продолжать изучать C, C++ и алгоритмы. Инженеры на стыке физики и программирования достаточно востребованы. 
Есть ряд задач вроде просчетов различных профилей нагрузок, работы материалов в специфических средах (сопромат в приложении к реальному миру), разного рода эвристика и адаптивные алгоритмы управления технологическими процессами. По сути вы будете одним из тех, кто создает Mathworks, Cadense и т.д.
С точки зрения раличных ЯП вам может потребоваться: Simscape Language, Modelica, C, C++. Источник. Походите по сайтам потенциальных работодателей, определитесь с требованиями, условиями работы, решаемыми задачами. Вам нужно найти то, что вы сможете делать хорошо и это будет вам интересно. 
Английский - обязательно. В мире науки/программирования без него никуда. Хороших инженеров привозят откуда угодно.
С точки зрения других ЯП полезно будет познакомиться с группой функциональных языков, с языками Go, Erlang, Python, Lisp, R.
Вопрос: Как сделать страницу вида site.ru/page#key?

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

Худший ответ: Формируйте ссылки правильно<a href="<?= Url::toRoute(['/site/page','#'=>'key'])?>">Я ссылко с якорем</a>
или<a href="/site/page#key">Я ссылко с якорем</a>
илиecho Html::a('Я ссылко с якорем',['/site/page','#'=>'key']);
Рендер к url не имеет никакого отношения
Вопрос: NodeJS, Nginx и SSL. Нужно ли между бакендом на node и nginx устанавливать ssl соединение?

Лучший ответ: На одном сервере - лучше использовать сокет
На нескольких - стоит использовать шифрование, даже на самоподписанных сертификатах

Худший ответ: Не вижу смысла если прокси на localhost
Вопрос: Как обратиться через this к переменной из вложенной функции?

Лучший ответ: Вот так можно сделать:...
var showSurname = (function() {
   block2.innerHTML = Module.surname;
   block3.innerHTML = this.surname;
}).bind(this);

showSurname();
...
Для IE8-Function.prototype.bind = function (context) {
  var f = this;
  return function() { 
    return f.apply(context, arguments);
  };
}

Худший ответ: Использовать call, apply
Вопрос: Что читать после «Изучаем java», если уже знаешь базовые алгоритмы и паттерны?

Лучший ответ: практиковаться. и по мере необходимости читать StackOverflow :)

Худший ответ: Я бы посоветовал выбрать сферу деятельности в которой вы хотите работать (android, web) и начинать разбирается в определённой сфере. Создать первые проекты.
Вопрос: Как правильно сделать ленту записей на CoreData?

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

Худший ответ: Может быть использовать NSFetchedResultsController?NSFetchedResultsController provides the interface between Core Data and UITableView objects.
Вопрос: Как запустить базу на 1С?

Лучший ответ: 1) Устанавливаете платформу (можно взять последнюю 8.3.9)
2) Решаете вопрос с лицензией (ключики, программные лицензии)
3) Добавляете в список "существующую базу" указав папку где лежит файл 1CD
4) Запускаете, и если конфигурация типовая смотрите наслаждаетесь
4а) Если конфигурация нетиповая и требует дополнительные ключи защиты то повторяете п.2 уже непосредственно с этм продуктом

Худший ответ: Дополню ответ Игоря.
Для версий платформы 1С 8.х существуют два режима работы - серверный (с использованием внешней СУБД) и файловый (с использованием встроенной СУБД). Файл 1Cv8.1CD - это как раз файл с данными встроенной СУБД.
Что бы работать с базой из файла 1Cv8.1CD , вам необходимо поместить его в пустой каталог и указать путь к этому каталогу в списке баз 1С. Может возникнуть проблема, если у вас файл от версии 8.3.9 со снятой совместимостью, а у вас установлена платформа версией ниже. Зато в обратной ситуацией все нормально - обратная совместимость поддерживается.
Вопрос: С каких 3-х шагов начать рисовать дизайн?

Лучший ответ: Создается впечатление, что люди действительно верят, что для того, чтобы начать зарабатывать достаточно пройти одни толковые курсы и сразу искать заказ.Но это не так.
Курсы могут дать начальный базовый шаг в профессии. Затем следует множество практики, гораздо больше, чем дается на курсах.
Да, бывает что можно выхватить заказ, может быть даже попасть на непонятного заказчика, которого это устроит, но это совершенно не будет означать стабильный поток заказов. После курсов - это просто новичок, без опыта, без навыков, со слабым пониманием как связана теория и практика.
Для начала, пойдите на курсы в ютубе. Послушайте/посмотрите несколько десятков разных лекций, начните ориентироваться. Попробуйте сделать что-то сами, оцените свои навыки и скоросьт работы. Затем уже можно поискать полезные книги, особенно слушая рекомендации на тех лекциях, которые вам показались более достойными.
И да, ВСЕГДА стоит порисовать дизайны - без практики все будет ни о чем.

Худший ответ: Могу сказать с каких 3-х шагов не стоит заниматься дизайном. ) Рынок перенасыщен, новичкам, без академического образования вообще ловить почти нечего.
Вопрос: Архитектура сервера?

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

Худший ответ: Конечно http здесь избыточен. Слать данные в открытое постоянное сокет-соеденение будет быстрее. Делал такое на одной машине и между удаленными.
Вопрос: Gitflow мёртв? Какие есть альтернативы?

Лучший ответ: Я не очень давно общаюсь с git, но у меня сложилось мнение, что git flow он не в расширениях, а в головах.
Я полагаю можно выделить в команде роль хранителя git flow традиций. Если будет совсем тяжело, можно и самостоятельно рутинные сценарии автоматизировать.
Хотя, признаюсь, я тут не очень чтобы компетентен. Я с git`ом пока работаю сольно "без ансамбля".

Худший ответ: использую gitflow на многих проектах, все устраивает.
Вопрос: Как восстановить файл?

Лучший ответ: масса вариантов
0. делайте бэкапы. каждый день. Все ИТшники делятся на 2 категории - те, кто делает бэкапы и те, кто ТЕПЕРЬ делает бэкапы.
1. если на диск особо ничего после удаления не писалось - шанс есть.  ссылку на утилиты я привел.

Худший ответ: Мне когда-то очень помогло testdisk
Вопрос: Nginx — как отправить половину пользователей на другой URI?

Лучший ответ: Есть специальный модуль для подобных вещей - ngx_http_split_clients_module.

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

Лучший ответ: такое делается нижней границей 
border-bottom
у нее можно и цвет и толщину и эффекты задать. в отличие от text-decoration: underline

Худший ответ: В варианте с нижним бордером нужно правильно подобрать line-height, чтобы выглядело как стандартное подчеркивание. В примере вероятнее всего это , и имеет padding,  если применять border непосредственно к  <a> , то линия будет шире слова.  Чтобы этого не возникало, нужно само слово обернуть в  span: <span>Home</span> или любой строчный контейнер,  и задать ему уже border-bottom, line-height и чтобы работала высота строки - display: inline-block, при наличии соседнего текста в строке еще и vertical-align: baseline, чтобы выделенное слово по высоте букв осталось на общей линии строки
Пример:a > span { border-bottom: 1px solid red;
    display: inline-block;
    line-height: 0.7;
    vertical-align: baseline; }
Вопрос: Где посмотреть сорцы боевого spa приложения на vue?

Лучший ответ: Вот есть неплохой шаблон построения spa на vue: https://github.com/codecasts/spa-starter-kit

Худший ответ: Reddit-app и spa-starter-kit, спасибо Вам за ссылки, Евгений и Андрей)
Вопрос: Как сделать, чтобы переменные менялись местами и вывести это на экран?

Лучший ответ: Есть еще более интересные решения.
stackoverflow.com/questions/16201656/how-to-swap-t...
Но лучше всего если вы учите js, а не тупо сдаете урок в школе, не задавайте такие вопросы, а гуглите, даже если это займет несколько дней. Когда вам пишут очень простые ответы на очень простые задачи, вы очень сильно проседаете в обучении.

Худший ответ: Типобезопасный обмен значений 2х переменных, без использования 3ей (прием для js)var a = prompt('Введите число а:');
  var b = prompt('Введите число b:');

  //меняем местами
  a = [b, (b = a)][0];

  alert(a);
  alert(b);
Классический пример с 3ей переменной уже написал VZVZ 
Математический пример обмена числовых переменных (как в Вашем примере)var a = parseFloat(prompt('Введите число а:'));
  var b = parseFloat(prompt('Введите число b:'));

  //меняем местами
  b = a + b;
  a = b - a;
  b = b - a;

  alert(a);
  alert(b);
Вопрос: Как организовать многопоточное обращение к сторонним API?

Лучший ответ: Допустим, вы создаете новый уникальный сервис по поиску дешевых авиабилетов ;)Интерфейс
1. Пользователь заходит на страницу вашего сервиса, выбирает направление (city) и дату вылета (date), нажимает Найти.
2. Оправляется AJAX POST запрос на /search.php {city, date}, который возвращает ID запроса (request_id).
3. Каждые 1-5 секунд отправляется AJAX GET запрос на /search.php?check=request_id, который возвращает процент готовности ответа (0-100%).
4. Когда готовность достигает 100%, отправляется AJAX GET запрос на /search.php?result=request_id который возвращает информацию о найденных билетах./search.php
1. Создание очереди заданий на запрос к авиакомпаниям
- создание ID запроса
$request_id = INSERT INTO `request` (`city`, `date`) VALUES (city, date);
- создание очереди заданий на получение информации по билетам
INSERT INTO `request_task` (`request_id`, `airline_id`, `status`) VALUES (request_id, 1, 0);
INSERT INTO `request_task` (`request_id`, `airline_id`, `status`) VALUES (request_id, 2, 0);
INSERT INTO `request_task` (`request_id`, `airline_id`, `status`) VALUES (request_id, 3, 0);
INSERT INTO `request_task` (`request_id`, `airline_id`, `status`) VALUES (request_id, 4, 0);
2. Проверка готовности ответа
SELECT COUNT(*) FROM `request_task` WHERE `request_id` = request_id AND `status` > 0;
3. Информация о найденных билетах
SELECT * FROM `request_result` WHERE `request_id` = request_id/task.phpСуть: выбрать из очереди заданий одну задачу и выполнить ее. Скрипт нужно запускать несколько раз в секунду в зависимости от нагрузки на сервис
1. Забронировать задачу на выполнение
$process = ip2long($_SERVER['SERVER_ADDR']).'.'.getmypid().'.'.microtime(TRUE);
UPDATE `request_task` SET `process` = $process WHERE `status` = 0 LIMIT 1;
2. Получить забронированную задачу
SELECT * FROM `request_task` WHERE `process` = $process
3. Обратится к нужной авиакомпании
if (airline_id == 1) запрос к Аэрофлоту
4. Положить результат обращения в `request_result`
5. UPDATE `request_task` SET `process` = 0, `status` = 1 WHERE `process` = $processТаким образом реализуется многопоточность!

Худший ответ: Вот это подойдет? 
php.net/manual/ru/function.curl-multi-exec.php
Вопрос: Как вы монетизируете блоги?

Лучший ответ: не совсем бложик но
14 000 в месяц с трастлинк
+ 4000 с сапы

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

Лучший ответ: Насколько полезным может оказаться изучение какого-либо языка программирования, для сист. администратора linux?На самом деле, всё зависит от того, какого уровня системным администратором Вы хотите стать. Иначе говоря, задачи какого уровня хотите решать в последствии... Уровня "ifconfig" и "обжать витую пару" или уровня "подправить ядро Linux'а". Это я условно конечно...
Как пример, один из очень знаменитых сис. админов, Игорь Сысоев. Программа созданная им и ставшая в последствии культовой - написана на Си...
Лет 15 назад, когда я думал о карьере сис. админа - я смотрел в сторону Python и до сих очень хорошо к нему отношусь. И надо сказать, в этом я не одинок, этот язык так же активно применяется буквально "везде", в т.ч. его активно используют такие компании, как например Google, а так же он не редко служит скриптовым языком с самых различных программах или частью их кода, например Blender3D. А так же на нем написано великое множество разного сетевого софта, от веб-фреймворков до различных серверов. Что, говорит о большой востребованности и высоком "качестве" данного языка. Мало кто ещё может похвастаться такой глубокой интеграцией в самых разных областях...
*Ещё раз хочу обратить Ваше внимание, что мы рассматриваем языки с точки зрения "полезности для сис. админа", а не общую практику программирования различных областей.

Худший ответ: Есть несколько открытых проектов по автоматизации парка машин, в которых используется язык Ruby из-за его лаконичности.
Вопрос: Как вывести"Вы экономите" в Opencart2?

Лучший ответ: Здравствуйте! Работает при установке для товара цены акции (не скидки), думаю это более логично.На странице товара/catalog/controller/product/product.php
Найти:$data['special'] = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);Добавить после:$data['discount_amount'] = $this->currency->format($this->tax->calculate(($product_info['price'] - $product_info['special']), $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);/catalog/view/theme/default/template/product/product.tpl
Найти:<li>
<h2><?php echo $special; ?></h2>
</li>Добавить после:<li class="discount_amount">
<?php echo 'Вы экономите '.$discount_amount; ?>
</li>На странице категории/catalog/controller/product/category.php
Найти:$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);Добавить после:$discount_amount = $this->currency->format($this->tax->calculate(($result['price'] - $result['special']), $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);Найти:'price'       => $price,
'special'     => $special,Добавить после:'discount_amount' => $discount_amount,/catalog/view/theme/default/template/product/category.tpl
Найти:<span class="price-new"><?php echo $product['special']; ?></span> <span class="price-old"><?php echo $product['price']; ?></span>Добавить после:<span class="discount_amount"><?php echo 'Вы экономите '.$product['discount_amount']; ?></span>Проверено на чистом OpenCart 2.3.0.2. По-хорошему, надо бы создать модификатор ocmod в формате xml, а не редактировать код напрямую, но это уже другой уровень.

Худший ответ: Здравствуйте!
Как сделать  чтобы не появилась "Вы экономите" - если не указан ?
Вопрос: Стоит ли писать на Delphi 10 или лучше изучать C#?

Лучший ответ: > оффлайн приложение, которое будет подключаться к RESTFul API
Типа пчелы против меда?
Может, вы хотели сказать "клиентское"?
> Просто хочу упростить
Лучше C#.
Delphi подустарел, и синтаксисом, и архитектурой библиотек, и серьезно его не обновляют, только с боку прилепляют новые фичи.
> в перспективе
Лучше C# (и вообще Си-подобные).

Худший ответ: Без разницы. Пиши на чем удобнее, и на чем приятнее.
Вопрос: Как работают WebSockets?

Лучший ответ: WebSocket - постоянное соединение поверх http(s)
При установлении соединения происходит рукопожатие с помощью специальных http заголовков, после любая сторона в любой момент времени (пока соединение не прервется) может писать в тело запроса сообщения. Каждое такое сообщение представляет из себя передаваемые данные + мета-данные
1. Можно найти сходство с tcp, только вместо пакета у нас сообщение. Так как ws работают поверх http, который в свою очередь работает поверх tcp, то формально одно сообщение может быть разбито на несколько tcp пакетов, а в одном пакете может содержаться несколько сообщений, однако единицей данных для ws является именно сообщение
2. ws - это постоянное соединение, которое будет висеть пока любая из сторон не закроет его либо пока не оборвется связь. Так как сокет формально может простаивать (когда нет обмена данными), то tcp соединение для него нужно открывать с опцией keep-alive, а так же желательно отправлять http заголовки для keep-alive в рукопожатии.
3. Любая сторона может в любой момент времени может отправить любое количество сообщений. Получающая сторона получит данные, когда до нее дойдут все tcp пакеты самого раннего из сообщений (это гарантирует, что сообщения придут в том же порядке, в котором они были отправлены)

Худший ответ: Вкратце:Ответы
1. Не совсем, но, думаю, скоро будет понятно
2. Соединение всегда открыто, если одна из сторон его не закроет или не прервется связь
3. Клиент отправляет - сервер тут же получает. Сервер отправляет - клиент тут же получает.На примере чата
1. Устанавливается соединение между сервером и клиентом 1 (handshake)
2. Сервер -> клиент1: Вы присоединились к чату
3. Сервер -> клиент1: Сейчас у нас 1 пользователь: клиент1
4. Устанавливается соединение между сервером и клиентом 2 (handshake)
5. Сервер -> клиент2: Вы присоединились к чату
6. Сервер -> клиент2: Сейчас у нас 2 пользователя: клиент1 и клиент2
7. Сервер -> клиент1: Присоединился клиент2
8. Клиент1 -> сервер: Скажи клиент2 "Привет!"
9. Сервер -> клиент2: Клиент1 сказал "Привет!"
10. Клиент2 -> сервер: Скажи клиент1 "Здасте!"
11. Сервер -> клиент1: Клиент2 сказал "Здасте!"
То есть клиенты могут когда угодно посылать сообщение серверу, он сразу же его прочитает, но не другим клиентам (минус сокетов). Сервер может послать сообщение любому клиенту, они сразу же его прочитают.
Вопрос: Выбор технологии при создании чата

Лучший ответ: Я бы наверное воткнул XMPP, из соображений удобства и совместимости. Средства найти вроде не сложно, вот например.

Худший ответ: pushmodule.slact.net/ — модуль для nginx который добаляет ему функционал Comet-сервера.
Вопрос: Как правильно отпарсить JSON во view Django?

Лучший ответ: NogerbekNurzhan, можно попробовать такclass DocumentOrderView(CsrfExemptMixin, JsonRequestResponseMixin, FormView):
    def post(self, request, *args, **kwargs):
        self.tree_update(None, self.request_json)
        return self.render_json_response({'saved': 'ok'})

    @staticmethod
    def tree_update(parent_id, children):
        for child in children:
            Tree.objects.filter(pk=child['id']).update(parent_id=parent_id)
            tree_update(child['id'], child.get('children', []))

Худший ответ: Вам нужно перебрать массив словарей, значения ключей которых могут быть также массивы со словарями?arr = [{u'id': 1}, {u'id': 2, u'children': [{u'id': 3}, {u'id': 4}]}, {u'id': 5, u'children': [{u'id': 6}, {u'id': 7}, {u'id': 8}, {u'id': 9}]},]

for item in arr:
    if 'children' in item:
        for child in item['children']:
            print(child['id'])
Вопрос: Область применения C, C++, C#?

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

Худший ответ: С плавно вытесняется Rust
C++ продолжает идти по пути бесконечного усложнения и понемногу заменяется, где это можно разными D/Go/... (но это происходит очень медленно)
C# плотно застрял в корпоративе и десктопном софте
Вопрос: Java.Lang.NullPointerException, Что мне делать с этой проказой?

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

Худший ответ: String touser = "Ваш символ встретился в данном вами предложении ровно " + husband.wife.x;
husband == null