Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как улучшать качество кода?

Лучший ответ:
Практикой и code review, теория тут не поможет.

Худший ответ:
Качество кода повышается с получением exp. Ты пишешь код, заимствуешь код, смотришь приёмы, берёшь что-то себе. Читаешь документацию, читаешь чужие исходники, статьи на сайтах. 
А вообще, сначала хорошо бы разобраться, что ты подразумеваешь под качеством кода. Если он выглядит паршиво: "название переменных, методов, классов, не соблюдение стандартов и правил, отступов и прочего", то это отдельный вопрос. Если ты такой код никому никогда не покажешь, то пусть так и будет пока. 
А если качество кода для тебя это отточенный алгоритм, безошибочная обработка, отказоустойчивость, то книги тебе не помогут. Исключительно только опыт.
Вопрос: Как достать имя и фамилию по id вк пользователя Python?

Лучший ответ:
Реализация кода совершено неправильна, код, как и сказал юзер o5a  относится к библиотеке vk.
См.пример ниже:import vk_api

vk = vk_api.VkApi(token="") # авторизация через токен (желательно)
vk = vk_api.VkApi(login="", password="") # авторизация через логин и пароль
vk._auth() # Если авторизируетесь через лог и пароль

# получение имени и фамилии

user = vk.method("users.get", {"user_ids": 1}) # вместо 1 подставляете айди нужного юзера
fullname = user[0]['first_name'] +  ' ' + user[0]['last_name']

Худший ответ:
Да, это код для библиотеки vk, а не vk_api. И понадобится авторизация (access_token).
Вопрос: Как через vk_api узнать информацию о пользователе?

Лучший ответ:
'users_ids':11111
внимательнее нужно быть, параметр называется user_ids

Худший ответ:
вместо id можно использовать slug: vk.com/solnzew, slug - solnzew
Вопрос: Как правильно верстать многостраничный сайт придерживаясь БЭМ?

Лучший ответ:
Если стараться максимально придерживаться БЭМ, то такой конструкции .page-y .services-section лучше избежать. Вот такого точно не должно быть .page-x .services section
Вот так тоже не правильно .page-x-services-section / .page-y-services-section вы косвенно уже привязались к какой-то из страниц.

Вы можете использовать микс:
page-x__services-section services-section
Либо модификатор:
services-section services-section_type_1

Такая конструкция .page-y .services-section имеет место быть, но лучше избегать или хотя бы не увлекаться

Худший ответ:
Согласно БЭМ, твои компоненты должны быть автономными. То есть, если ты видешь, на обеих страницах блок, который нужно классифицировать как .services, то так и называешь. Для того, чтобы в такой блок внести какие-то специальные изменения, то нужно добавлять модификатор к списку классов. Например: .services--scheme-one. В итоге в атребуте класс, компонента будут такие названия: class="services services--scheme-one". В стилях, естественно, селектор только по одному классу должен быть.
Вопрос: Где искать информацию о API ларавела?

Лучший ответ:
https://laravel.com/docs/7.x/controllers#resource-... сравни с \Illuminate\Routing\PendingResourceRegistration

Как обычно, унылая песня про документацию и «там также не всё». Документацию читать надо, а не листать.

Худший ответ:
Вот тут есть документация ко всем стандартным классам
Вопрос: Как вывести данные из БД в массив (PHP)?

Лучший ответ:
Понял как вывести данные с БДИ как? Не вижу кода который у вас что-то вообще запрашивает из бд. БТВ данные из бд приходят обычно в виде массива (есть нюансы, но в целом так).

Худший ответ:
$query ="SELECT * FROM menu";
$query_do = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link));
//  получаем данные в виде массива
$result = mysqli_fetch_array($query_do);
// теперь можем вытаскивать. Где id - название столбца
$result['id'];
Вопрос: Python Как сделать что бы программа не выходила после выполнения?

Лучший ответ:
Использовать цикл while

Худший ответ:
from SimpleQIWI import *
import sys

# TODO: переименовать. Большими буквами именуются обычно константы.
# здесь TOKEN лучше переименовать в token_file_name
TOKEN = input('Введите путь к токену : ')
PHONE = input('Введите номер телефона : ')

# TODO: Обработать ошибку загрузки токена
with open(TOKEN, 'r') as f:
    # TODO: переименовать. get_token - это плохое имя переменной 
    # для хранения токена. Лучше просто token или auth_token
    GET_TOKEN = f.readline()

# TODO: Обработать ошибку некорректного/просроченного токена
api = QApi(token=GET_TOKEN, phone=PHONE)

while True:
    print('------------')
    print('[1] - Посмотреть баланс', '\n[2] - Отправить деньги', '\n[3] - Получить входящие платежи', '\n[4] - Выход')

    user = input()

    if user == '1':
      try:
        print('------------', '\nВаш баланс составляет : ' + str( api.balance ))

      except Exception:
        # TODO: Исследовать классы возможных ошибок 
        # и сделать целевые обработчики на уровне итерации цикла
        # чтобы не перегружать код этой обработкой
        print('Error\n' + str( sys.exc_info()[ 1 ] ))

    elif user == '2':
      print( '------------', '\n')
      # TODO: Сделать словарь с кэшем вводившихся ранее значений
      # чтобы не вводить повторно при ошибках
      payee_phone = input('Введите номер телефона получателя ( в международном формате + ) : ')
      payee_amount = input('Введите сумму перевода ( в рублях ) : ')
      payee_comment = input('Введите комментарий к переводу ( необязательно ) : ')

      try:
        api.pay(account=payee_phone, amount=payee_amount, comment=payee_comment)

      except Exception:
        print( 'Error\n' + str( sys.exc_info()[ 1 ] ) )
        print( '\nЕсли вы указали свой номер, то платеж будет невозможен!' ) 

    elif user == '3':
      print( '------------\n' )
      print( 'Функция временно не доступна' )

    elif user == '4':
      sys.exit()

    else:
      print( '\nТакого метода не существует!' )
Вопрос: Агрегация данных из словаря Python?

Лучший ответ:
from collections import defaultdict

a =  [
    {'name': 'Иван', 'возраст': '23'},
    {'name': 'Иван', 'возраст': '25'},
    {'name': 'Пётр', 'возраст': '34'},
    {'name': 'Пётр', 'возраст': '37'}
]
d = defaultdict(list)

for i in a:
    d[i['name']].append(i['возраст'])

Худший ответ:
К чему лишние библиотеки? a =  [
    {'name': 'Иван', 'возраст': '23'},
    {'name': 'Иван', 'возраст': '25'},
    {'name': 'Пётр', 'возраст': '34'},
    {'name': 'Пётр', 'возраст': '37'}
]
d = [{dct.get('name'):dct.get('возраст')} for dct in a]
Вопрос: Как проверить адекватную скорость загрузки сайта?

Лучший ответ:
PageSpeed от гугл даёт только базовые советы, на него не равняйтесь.
Проверяйте скорость загрузки в консоли, во вкладке Network – точнее некуда. Видите затупы - исправляете. Уменьшаете количество запросов, сжимаете фотографии, подключаете ленивые загрузки, асинхронную загрузку шрифтов, кешируете контент.

Худший ответ:
А зачем кому то верить там же написано за что списываются баллы и что надо исправлять и даже как исправлять, если все исправили то никак 72 быть не может, а если чисто одну цифорку смотрите то тут уже сам дурак
Вопрос: Как вывести введенное число буквами в С++?

Лучший ответ:
гугл павэр
с++ number to words
https://stackoverflow.com/a/28750595

Худший ответ:
Если я ничего не путаю, то чтобы перевести из символов char (допустим "0", "1" и тд) в int нужно было вычесть нолик. char literal = '2';
int number = literal - '0';
То, наверное, чтобы перевести из числа в буквы, нужно с помощью таких операций % и // разбить число на цифры и перевести в символы. (ОБЯЗАТЕЛЬНО нужно по одной цифре переводить сразу все число не получится)
Вопрос: Хорошо ли написан класс БД?

Лучший ответ:
die('DB ERROR');
Сразу нет! Класс не должен останавливать приложение, если произошла ошибка. Он должен бросать исключение, а что делать дальше должен решать клиентский код.никакой работы с БД не должно быть в модели
В каком смысле это написано? Где это написано?Ухожу с синглтона
На каждый запрос будете создавать отдельное подключение к БД? Там вообще то есть ограничение на количество открытых.
Я не заметил особой разницы между работой с mysqli и с вашим классом. Инкапсуляция бинда параметров метод query только? Так унаследуйтесь от класса mysqli и напишите удобный метод для этого.
И почему вы не берёте какую то готовую обёртку? Благо их написано тысячи!

Худший ответ:
1. Мое личное мнение - использовать PDO как движок для своей обертки - очень плохая идея. PDO универсален, тем самым он ограничивает многие возможности. По сути, это весьма усложненная и неторопливая махина. 
2. Метод query до неприличия простой. Я не вижу тут никаких плюшек, нет ни одного преимущества обертки над самим PDO. Я писал много времени обертку над MySql, можешь посмотреть, что обычно добавляется к возможностям. 
3. У обертки не должно быть методов типа getRows, getColumn и тп. отсебятины. Её функция - обрабатывать запросы, отдавать ответы и какие-то вспомогательные функции, типа lastInsertId и отдавать ошибки. Все остальное должно реализовываться в вышестоящем слое, неважно как ты его назовешь.
4. всё началось с фразы "никакой работы с БД не должно быть в модели".  это правильно и это ты правильно понял, абстрагировав слой БД от слоя модели. Советую почитать книгу Фаулера "Архитектуру корп. пр. приложений" и особенно главу "Источники данных". Без этой концепции ты дальше своей подделки не уедешь в знаниях.
Вопрос: Какой язык нужен для написания серверной части?

Лучший ответ:
Самое просто это конечно же javascrtipt(ajax)+php+mysql
Уйма примеров для новичков. в ютубе.

С другой стороны, если вы уже знакомы с html/css то есть смысл в изучении javascript+nodejs+mysql

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

Все топовые провайдеры облаков это умеют: amazon, google, microsoft.
Вопрос: Как записать текст в файл?

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

Худший ответ:
На onchange инпута нужно навесить вызов ajax запроса, который передаст в введённую строку внешнему обработчику, который подключится к ftp и передаст данные.
Вопрос: Какие есть специфические инструменты оптимизации скорости Bitrix?

Лучший ответ:
Оптимизация скорости работы Битрикса это комплексная работа от оптимизации контента до настроек сервера.
Пару десятков пунктов на что обратить внимание точно найдется.
Начните с вкладки Производительность /bitrix/admin/perfmon_db_server.php и по порядку.
Прогоните через гуглспидтест
В публичной части в панели сверху включите Отладку и смотрите запросы.
Пользуйтесь кешированием компонентов, технологией композитной сайт и cdn.
В общем - много чего...еще можно nginx или apache покрутить, тюнинг mysql....

Худший ответ:
Битрикс сам по себе тормозной в силу того что он гигантский. Если вы не ковырялись в нем, то вряд-ли вам удастся его существенно оптимизировать (не выкидывая функционал).

Если у вас VDS то первый совет - увеличить память. Зачастую это решает все проблемы со скорость.

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

Лучший ответ:
Пользуюсь приложением Google Keep. 
Бесплатное, есть на всех устройствах.
Можно с кем-нибудь делать совместные заметки и задачи.

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

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

Худший ответ:
По моему опыту в ремонте утопленников - если прошло больше недели и был БЕЗ аккумулятора (сняли сразу как залили) - то уже сложно, но можно, зависит от множества факторов: куда попало, какая жидкость (чай, с сахаром или без, пиво/вино, горячий шоколад, молоко....) и была ли пыль внутри и какая. Ну и от температуры в помещении где он лежал это время. Год - лучше не мучать, по запчастям протестировать, что живое - распродать, неисправное - продать как неисправное (да, это покупают на запчасти). 
А вот если не отключили аккумулятор - уже через пару дней крайне сложно восстанавливать, через неделю - почти нереально и зависит куда попала жидкость. А уж через год... Там будет просто груда ржавчины. Останется снять и использовать то, что ещё живо, остальное выбросить (это уже и продать почти нереально).
Вопрос: Нет php.ini, но есть php.ini-development и php.ini-production. Какая между ними разница?

Лучший ответ:
Не одинаковы, разница в конфигах есть.


просто переименовать один из них, удалив часть названия, чтобы остался только php.ini. Но который?
Да, предполагается, что вы возьмете один из этих файлов как основу для создания собственного php.ini. Если для разработки - берите за основу development. Все равно вам придется внутри что-то менять, по умолчанию там много всего отключено.

И нужно ли предпринимать еще дополнительные действия в связи с этим переименованием - вручную задавать пути к ним где-то и т.д.?Файл php.ini подключится автоматически. Но в принципе вы можете иметь сколько угодно конфигов для разных задач и указывать их как описано в документации.

Худший ответ:
Смешались в кучу кони, люди...

А всего-то нужен онлайн переводчик и немного здравого смысла

- development в переводе с английского означает "разработка", то есть процесс создания программы, когда программист является единственным пользователем
- production в переводе с английского означает "работа в штатном режиме", то есть это когда разработка уже закончена и приложение установлено на сервер и у него тыщи пользователей, среди которых нет программиста

Как ты думаешь, какое из них тебе подходит?

Именно php.ini есть свой отделдьный в XAMPP,
И тут возникает вопрос
Кто тебе мешал использовать тот РНР который у тебя уже есть, и зачем понадобилось скачивать ещё один?
Что такое "системный РНР" и чем он отличается от "несистемного"?
Вопрос: Как сменить иконку в трее у программы?

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

Худший ответ:
Зависит от программы, иконку которой вы хотите сменить, и ее архитектуры. К примеру, тот же пунто свитчер меняет иконку, в зависимости от настроек и ситуации. И я не смотрел, как именно он это делает, не обязательно берет иконку из файла или ресурсов в exe, он может и на лету ее "рисовать".
В теории можно всё. И здесь два основных пути. Либо как-то дизассемблируем программу или достаем ее исходники и меняем ее саму. Либо программу не трогаем, а сверху навешиваем костыль в виде другой программы, которая будет как-то перехватывать первую или даже тупо спамить зелеными иконками (самое простое решение), т.е. даже если иконка сменится, то она сразу же будет снова заменена на зеленый квадрат, но это надо, чтобы своя самописная программа сидела в фоне и контролировала первую.
То есть в любом случае, скорее всего, нужно будет программное решение, а не поменять значение в реестре. Просто значение поменять возможно, только если в архитектуре самой программы заложена такая настройка, но она довольно бессмысленная, так что вряд ли она есть.
Вопрос: С чего начать изучение разработки клиент-серверных веб-приложений?

Лучший ответ:
А шо ты хотел? Универсальный стандарт? Знаешь сколько за год новых продуктов появляется для js?

Для конкретных задач подходят конкретные инструменты. Для конкретных инструментов нужны конкретные от тебя запросы. Для конкретных запросов нужны конкретные познания фундаментальных основ

Есть еще два варианта: выбирать из того что советуют и выбирать из симпатии к названию/описанию.

А порядок таков: интернет, компьютерные сети, клиент-серверной архитектуры приложения, базы данных, основы системного администрирования, веб разработка (фронт, бэк и обслуживающее это всё ПО), архитектура веб приложений, программирование

Копать инфу по каждой теме из порядка, пока не сможете:
А)сами ответить на свой топик
или
Б)вести монолог на любую из этих тем хотя бы 5 минут

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

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

А это единственный правильный путь в данной ситуации, если Вы хотите стать разработчиком, а не "пилилкиным на пол ставки" 
Ты узнаешь технологии и начинаешь в них разбираться. Главное не "перепрыгивать" с одной технологии прежде Вы на 100% не убедитесь в том, что функционал не реализуем в ней.
Вопрос: Как правильно обновить общую сумму?

Лучший ответ:
Вот вариант решения. На проблемную строку указал Дмитрий Беляев.
Помимо сомнительного решения хранить данные в DOM так же дополню:
1) Используйте const по умолчанию, let только если будете менять значение переменной. При этом, если в переменной объект или массив, а Вы меняете свойство объекта или элементы массива, то это тоже const.
2) Не надо обращаться в DOM при вызове функции, чтобы найти там какой-то элемент. Элемент никуда не девается в Вашем случае. Соответственно, элемент лучше найти один раз вне функции, а внутри функции только обращаться к переменной, которая хранит этот элемент. Поиск в DOM одна из самых медленных операций.
3) Не используйте innerHTML без реальной необходимости. textContent в Вашем случае лучше подходит. Так быстрее и безопаснее.
snippet

Худший ответ:
Дело в этой строке:total.innerHTML = Number(item.textContent) + Number(item.textContent);в total по сути выводится последний элемент умноженный на 2.

Ну и хранить данные в DOM, и каждый раз парсить из текста числа - так себе идея.
Хранити данные в переменных и в виде чисел, а DOM используйте только для отрисовки.
Вопрос: Ошибка при установке pip install PyInstaller. Что делать?

Лучший ответ:
Кириллица в имени пользователя?

Худший ответ:
Кириллица в имене пользователя,https://ru.stackoverflow.com/questions/526785/%d0%...
Вопрос: Инструменты для создания обучающих видео презентаций?

Лучший ответ:
Делаем презентацию (Power Point)Добавляем эффекты по клику мышиВключаем запись экрана и кликаем по презентации (Bandicam, NVidia Shadow Play)Пишем отдельно звук (объяснения)Склеиваем в видео редакторе (Sony Vegas, Adobe Premiere)

Худший ответ:
сейчас же онлайн полно сервисов
в некоторых мультики даже есть, поищите
https://prezi.com/product/
https://lifehacker.com/five-best-online-presentati...
Вопрос: Как узнать в какую сторону прокрутили колесико мышки?

Лучший ответ:
Проверять поидее дельту var delta = e.deltaY || e.detail || e.wheelDelta;

Худший ответ:
10. Как узнать в какую сторону юзер крутит колесо мыши?
Вопрос: Какой смысл использовать IEnumerable?

Лучший ответ:
главная фишка IEnumerable это возможность создавать параллельную конвеерную обработку легкочитаемым кодом. переводя на кухонный язык - если функция возвращает IEnumerable<что то там> из относительно медленного источника (БД, сложная обработка) она может делать yield return <что то там> поштучно. если эта функция оформлена как асинхронная, то вызывающий код, может быть написан, так, как будто просто получает IEnumerable<что то там> сразу, но с ключевым словом await. в итоге вызывающий код, и код поставщик данных, будут обрабатываться параллельно
весь LINQ построен на IEnumerable, не только как на типе посреднике между типовыми обработками наборов данных, имеющих не известный заранее размер (тут бы и List справился), но и на возможности создавать асинхронные перегрузки для основных методов LINQps yield return вообще мощная штука. даже без async/await. как пример yieldprolog.sourceforge.net

Худший ответ:
https://docs.microsoft.com/en-us/dotnet/csharp/lan...The foreach statement executes a statement or a block of statements for each element in an instance of the type that implements the System.Collections.IEnumerable or System.Collections.Generic.IEnumerable interface. The foreach statement is not limited to those types and can be applied to an instance of any type that satisfies the following conditions:    has the public parameterless GetEnumerator method whose return type is either class, struct, or interface type,    the return type of the GetEnumerator method has the public Current property and the public parameterless MoveNext method whose return type is Boolean.
Так что да, НАПРЯМУЮ вы очень редко будете пользоваться IEnumerable, НО если вы хотите чтобы ваш тип данных можно было использовать как коллекцию для foreach, удобно реализовать интерфейс IEnumerable чтобы убедиться что ваш тип реализует то, что будет использовано циклом foreach (хотя, строго говоря делать это  не обязательно - в конечном счёте компилятору нужны лишь конкретные публичные методы, т.е. компилятор действует здесь по принципу структурной типизации).
Вопрос: Плашку 2400Mhz вместо 2666Mhz что будет?

Лучший ответ:
Обе планки (и старая и новая) будут работать на 2400.
Но вы не заметите разницу.

Худший ответ:
Память будет работать с максимально возможной для нее скоростью - 2400Mhz
*не сгорит 
*не разгонится до 2666Mhz
Вопрос: Как безопасно отключить на время HDD и SSD?

Лучший ответ:
Выключить компьютер из розетки.
Запомнить какой конкретно использовался кабель (надписать).
Запомнить настройки в BIOS.

Худший ответ:
Если не использовались raid-массивы, то в любом случае извлечь данные будет можно после отключения. Так или иначе. А вот так, или таки иначе - от кучи мелких нюансов зависит.
Вопрос: Не открываются никакие порты кроме 80. Что делать?

Лучший ответ:
Вероятно у вас просто нет белого IP адреса. Отсюда и проблема. 
Но это догадки.

Непонятно как вы открывали порты, для чего, и каким образом отличаете открытый порт от неоткрытого?

Худший ответ:
Дишманский китай, из серии "главное - цена". 

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

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

Худший ответ:
Вот тут неплохой обзор. Правда в бюджет не впишетесь
https://www.youtube.com/watch?v=QhbA0uuIst0&t=327s
Вопрос: Как выучить английский за 2 года до уровня ЕГЭ?

Лучший ответ:
Тебе повезло

В новом проекте приказа министерства просвещения РФ обязательными госэкзаменами для школьников значатся только русский язык и базовая математика. ЕГЭ по иностранному языку не включили в список по просьбе Национального родительского комитета. Там считают, что обязательный ЕГЭ по иностранному языку противоречит Стратегии национальной безопасности РФ.

можно не учить

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

Лучший ответ:
никаких. серверы не для разгона.

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

Лучший ответ:
Никак. Просто смиритесь.
Хеш - на то и хеш, чтобы формулу никак нельзя было получить.

Худший ответ:
Никак не узнать по этим данным.Пробил по разным онлайн декодерам, толку ноль.Так он соленый скорее всего.
Вопрос: JSX сложное сравнение?

Лучший ответ:
isAuthenticated().direct.role === 'Директор' || isAuthenticated().direct.role === 'Управляющий' ... дальше, думаю догадаетесь сами

Худший ответ:
const userRole = isAuthenticated().direct.role;

['Директор', 'Управляющий' , 'role name'].includes(userRole) ? ...code... : ...code... ;
Правда, проблемы у вас всё равно есть. Самая очевидная - этот код падает, если юзер не авторизован и isAuthenticated возвращает false, а вы пытаетесь у этого значения свойство direct получить.