Ещё не угасла надежда на слабый сигнал Wi-Fi в аэропорту, на заряд батареи, который вот-вот заставит ноутбук вырубиться — а розетку здесь найти та ещё задача — и на то, что письмо клиенту на миллион долларов вроде ушло. И в этот момент «пожалуйста, заработай» вылезает приводящее в шок сообщение: «Упс».

image

Ошибка. Упс… возникла серверная ошибка и ваше письмо не отправилось.

Как в некоторые бросающие в дрожь моменты фильма «Американский психопат» это не очень различимое, бесстрастное сообщение от почты Gmail вонзает кинжал точно в моё сердце, мгновенно порождая отчаяние — что же пошло не так?

Несомненно, конечно, сейчас я посмотрю, что это за ошибка #001. И что?

От Google Chrome приходит сообщение об ошибке ещё бредовей, лучше от него не становится. Похоже на желание быть ещё одним куском хипстерского софта, который подражает иконкам «Макинтоша» 1984 года. Этот интерфейс смеётся вам в лицо, когда вы раздражены:

image

Вот, блин!
Что-то пошло не так в процессе отображения этой веб-страницы. Чтобы продолжить — перезагрузитесь, или откройте новую страницу.


Может быть, это часть какого-то величественного замысла технологического гиганта. В конце концов, Google является местом улыбок. Логотип со всеми цветами радуги и три сытных трапезы в день располагают работать с невероятной отдачей. Но, скажем справедливости ради, Гугл совсем не одинок в этом подходе: «упали — улыбнитесь», по-отношению к сообщениям об ошибках.

Microsoft, к сожалению, рассматривает вопрос о реализации того же миленького метода мышления в модернизации синего «экрана смерти», как части своей — в остальном, вдохновляющей — новой [на момент написания статьи — прим. пер.] операционной системы Windows 8:

image

Ваш ПК столкнулся с проблемой, которую не может решить и сейчас ему потребуется перезагрузка.
Синий «экран смерти» Windows 8.


Как хорошо-то! Не иначе как мой 14-летний племянник устроился в Редмонд сообщения об ошибках сочинять.

Но — какая удача — Microsoft даёт какое-то указание. Посмотрите сообщение об ошибке — «HAL_INITIALIZATION_FAILED»… Однако, как же, — это ведь и означает синий «экран смерти». Мой компьютер полностью накрылся.

Чтобы превзойти Гугл по «упсам», сайт XBOX от Microsoft вводит восклицание «Упс!» дважды в своё сообщение об ошибке: первый раз в заголовке и затем как первое слово в пояснении к заголовку. Очевидно, после того как сорвал чьи-то планы, лучшее, что можно сделать, это снова и снова восклицать «Упс!».

image


Упс! Упс, мобильный сайт XBOX не отконфигурирован для вашего устройства. Приносим извинения за неудобства, убедитесь, что вы посещаете сайт xbox.com на десктопе.

Ага, конечно — эту страничку я полайкаю.

И не надо думать, что в некоммерческой Mozilla Foundation этих миленьких странностей в сообщениях об ошибках в браузере Firefox нет.

image

Плагин Adobe Flash упал.

Фигурка Lego сожалеет, что вы не можете открыть ваш любимый сериал.

В такой момент всегда под рукой есть YouTube, не так ли? Миллионы забавных роликов, чтобы помочь нам расслабиться в трудной ситуации.

image

Данное видео приватно. Извините за это.

Facebook?

image

Что-то пошло не так. Мы работаем над тем, чтобы исправить это как можно скорее. Вы сможете попробовать снова спустя какое-то время.

Как насчёт музыки с Apple iCloud?

image


iCloud не может найти данную страницу. Пожалуйста, перепроверьте запрос или попробуйте позже.

Проверим Twitter?

image

Twitter вышел за пределы возможностей. Слишком много твитов! Пожалуйста, выдержите паузу и попробуйте снова.

Есть ли выход из этого приветливого чистилища?

Модная компания Plaxo — ваша адресная книга для жизни — не только также выбрала «упс», но и ввела другой уровень наведения таинственного страха. Но тсс … эта ошибка — «наш маленький секрет».

image

Похоже, есть проблема. Вот что я вам скажу — дайте нам время устранить её, и пусть это будет наш маленький секрет. Пожалуйста, подождите 30 секунд и попробуйте снова.

Что происходит?

Вы знаете, не так давно, когда что-то в программном обеспечении создавало трудности для пользователей, то у производителей программного обеспечения было блестящее безотказное и простое решение: добавить некоторое руководство в раздел справки. Вместо траты времени на то, чтобы сделать сложное простым и очевидным, производители софта скидывали ответственность на пользователя: «Гм, не знаем, как сделать просто, почитайте мануалы».

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

image

Из фильма «Американский психопат»

Корни «упс»!


Надписи под карикатурным изображением жителя Нью-Йорка, появившейся в 1925 году, приписывают первое публичное появление «Упс!» («Whoopsie Daisy!»). Но реальные корни явления «опачки» можно увидеть в операционной системе Linux.

image

Пингвин Linux

Это твоя вина, пингвин. И не смотри на меня так.

На "ошибку в ядре" Linux отвечает сообщением об ошибке OOPS. Впервые использованный в 1991 году код Linux для сообщений об ошибках, возможно, вошёл в подсознание разработчиков и, в конечном итоге, привёл к сегодняшнему распространению «упс». Ниже приведён пример:

Не удалось обработать запрос страничной подкачки файлов ядра на виртуальном адресе 211e2018

c0129577

*pde = 00000000

Oops: 0000

CPU:    0

EIP:    0010:[<c0129577>]    Not tainted

Using defaults from ksymoops -t elf32-i386 -a i386

EFLAGS: 00010083

eax: d7ee5000   ebx: b420e080   ecx: c164e000   edx: c1615d04

esi: c16073d0   edi: 00000246   ebp: 000001f0   esp: d7c5de84

ds: 0018   es: 0018   ss: 0018

Process mount (pid: 25, stackpage=d7c5d000)

Stack: 00000000 c0309c00 000001f0 00000000 c01fadb7 c16073d0 000001f0 c1615a40
c1615700 c1615a40 c01fa126 00000001 000001f0 00000000 c022f793 c1615a40
00000001 00000000 000001f0 d7b6fde0 d7c5df14 0000006e bfffec0c 00000018

Call Trace: [<c01fadb7>] [<c01fa126>] [<c022f793>] [<c01f8acb>] [<c01f8720>]
[<c01f9450>] [<c0106d40>] [<c0106c4f>]

Code: 8b 44 81 18 89 41 14 83 f8 ff 75 1d 8b 41 04 8b 11 89 42 04

(Если вам интересны все эти нюансы, то разъяснение имеется у madwifi.)

Когда мило — хорошо


Поймите меня правильно — в миленьких штучках нет ничего плохого.

image

Милашка!
(С сайта Cute overload)

Миленькое работает, когда…, когда вы не ждёте ничего конкретного в данной ситуации. Как, например, когда смотрите на очаровательного ребёнка.

Ой, лапушка, он наделал в штанишки!
Уй-ти-ти, он пукнул!
Ха-ха, он отрыгнул на меня!

Но когда есть ожидания, миленькое не работает. Как, например, с взрослыми.

Слушай, используй туалет … и туалетную бумагу.
Боже мой, какой неприятный запах!
Вам не лучше пойти домой?

Так, когда компания Google была ещё молодой, модернистской и стремительно растущей, их сообщения об ошибках были действительно забавными. Такие глупенькие очаровательные гуглеры!

image

Упс! Этого не должно было случиться.
Реакция агрегатора Google Reader


Необычно!

Но теперь, когда Гугл является зарегистрированной на бирже компанией стоимостью 186 млрд. долларов, на которую мы полагаемся в вопросах важного делового общения и которая может создавать или ликвидировать целые направления работы, их милые сообщения об ошибках выглядят почти столь же «мило» как на известных фотографиях совсем юный Билл Гейтс, бросающий дискеты у себя в офисе. Другими словами, остаётся страшноватое впечатление.

Отойти от границы допустимого


Язык сообщений об ошибках в старом программном обеспечении (например, в MS-DOS) был, как хорошо известно, недружелюбным к пользователю.

image


MS DOS

О, да, понятное дело, ff0a8e6c не должен был указывать на HAL.DLL!

Поэтому люди, озабоченные взаимодействием с пользователями, давали указания и рекомендации. За последние три десятилетия было написано множество статей о подготовке хороших сообщений об ошибках. Здесь. Здесь ещё одна. И здесь. И здесь. И здесь. И ещё одна — авторами с Yahoo! И другая, приравнивающая сообщения об ошибках к упущенной выручке. И ещё одна, о знаменитой 404-й…

Однако сегодняшние авторы сообщений об ошибках, претендующие на оскорбляющее остроумие, качнули маятник слишком далеко в обратную сторону. Общая рекомендация использовать естественный язык, чтобы преобразовать невнятное сообщение «Ошибка: переполнение стека», реализовалась не во что-то вежливое и понятное, а в глуповатое «Упс! Вот блин!».

Нам надо поубавить тон с зашкаливающе дружелюбного пониже — текущий уровень выглядит жутко. Существует ведь некоторая золотая середина, когда разработчики могут извиниться, а программное обеспечение может предоставить пользователю вежливую подсказку о том, что делать дальше. Веб-сайт, приложение, программное обеспечение — это ваш прокол. Помогите пользователю выполнить требуемую ему задачу КАК МОЖНО БЫСТРЕЕ.

Перефразируя известное высказывание ТВ-ведущего Джона Стюарта во время дебатов кандидатов в президенты США: «упс» — совсем не то слово из трёх букв, которое я выбрал бы.
Поделиться с друзьями
-->

Комментарии (79)


  1. vintage
    20.11.2016 15:44
    +5

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


    1. handicraftsman
      20.11.2016 16:01

      У самого подобное. Потому я при каждой ошибке заставляю свой код выплёвывать бектрейсы и подобные вещи :D


      1. vedenin1980
        20.11.2016 17:44
        +16

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


        1. vintage
          20.11.2016 17:50
          -6

          Мечта хакера — "security by obscurity".


          1. herr_kaizer
            20.11.2016 18:11
            +12

            Прятанье логов в веб-сервисах — это не «security by obscurity». Это простой здравый смысл.


            1. vintage
              20.11.2016 18:36
              -7

              Как и любое другое прятанье, это — "security by obscurity". И наличие этого "obscurity" провоцирует программистов забивать на "security". А вот когда работаешь "в открытую", то просто не можешь "забить", потому, что знаешь, что это будет тут же обнаружено.


              1. terryP
                20.11.2016 18:43
                +4

                Ок, ссылку на сервис банка, компании уровня гугла и т.п. серьезного бизнеса который сообщал все «в открытую» от логов до инфраструктуры. Или вы лично считаете себя умнее всех экспертов по безопансоти в мире?


                1. vintage
                  20.11.2016 19:04
                  -2

                  Взывание к авторитету и сливание кармы — так себе аргументы.


                  Я ни разу в жизни не допустил ни SQL инъекций, ни XSS уязвимостей. Не потому, что я такой внимательный или наблюдательный или иксперт по безопасности, а потому, что строю архитектуру так, чтобы эти уязвимости исключить. Поэтому мне всегда было смешно наблюдать, как многие борются за безопасность путём "скрытия текста ошибки", "фильтрации SQL конструкций во вводе пользователя" и тому подобными простыми и неэффективными способами.


                  1. lostpassword
                    20.11.2016 22:07
                    +6

                    Я ни разу в жизни не допустил ни SQL инъекций, ни XSS уязвимостей.
                    А таки откуда ви знаете? :D


                    1. vintage
                      20.11.2016 22:30
                      -3

                      Оттуда же, откуда вы знаете, что не кусали свой локоть. Я просто не собирал ни SQL, ни HTML из строк. А когда всё же приходилось — использовал инструменты с автоэкранированием.


                  1. 3aicheg
                    21.11.2016 05:57

                    «Security through obscurity» во многих случаях вполне себе работает. Говорю это как человек, в отличие от вас, действительно ни разу в жизни не допустивший ни SQL-инъекций, ни XSS-уязвимостей. Работает, может быть, плохо и недолго, но работает. Характерный пример: когда находят уязвимость и собираются публиковать, как правило, перед публикацией посылают описание производителю и дают время на устранение уязвимости.


                1. rkfg
                  20.11.2016 20:24

                  Недавно была атака на банки, так вот Сбербанк Онлайн выдавал пусть и не бектрейсы, но исключения Java с указанием имён пэкейджей и классов. В частности, про невозможность Hibernate подключиться к БД или ошибки рефлексии. Не то чтобы прямо что-то критичное, но я несколько удивился. Ещё раньше на запуске нынешней системы на Java у них и трейсы вылетали целиком, сейчас, вроде, убрали.


                1. tmin10
                  22.11.2016 12:47

                  Когда сбербанк онлайн был по ддосом, он почему-то вывел произошедшее исключение, интересно, почему оно не обработалось:
                  Error 500: java.lang.SecurityException: org.hibernate.exception.GenericJDBCException: Cannot open connection


              1. herr_kaizer
                20.11.2016 18:56
                +5

                Забивать на «security» провоцирует отсутствие аудита и непрофессионализм. Никакой безопасник никогда не разрешит вывешивать логи ошибок на всеобщее обозрение.


          1. terryP
            20.11.2016 18:41
            +4

            «security by obscurity» это использовать явно дырявые решения. А кричать на каждом углу что у вас в сейфе лежит сто миллионов долларов наличкой в расчете что сейф никто не сможет взломать это просто глупость.


            1. vintage
              20.11.2016 19:19

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


          1. VovanZ
            20.11.2016 22:09
            +1

            "security by obscurity" не значит, что obscurity это плохо. Это значит, что когда obscurity — единственный способ обеспечения безопасности — вот это плохо.


            1. vintage
              20.11.2016 22:33
              -1

              О том и речь, что "obscurity" вообще не обеспечивает никакого "security". Это как иконки на торпеде — в лучшем случае никак не повлияет, а в худшем даст ложную уверенность.


              1. valera5505
                21.11.2016 01:14
                +1

                Я вот одного понять не могу, почему вы считаете это взаимоисключающими вещами? То есть никто не может и сделать безопасно, и спрятать логи?


        1. TheShock
          21.11.2016 03:01
          -1

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

          Простите, но ошибка, которая крушит браузер — на клиентской стороне. И бектрейс хакеру никакой дополнительной информации не даст — у него и так уже код весь есть.


      1. Fedcomp
        20.11.2016 19:31
        +1

        Код в разработке и так должен выплевывать бэктрейсы, а на проде можно использовать вещи вроде rollbar чтобы видеть ошибки.


    1. TsarS
      20.11.2016 16:11

      Что-нибудь вроде «По нашей статистике, 85% таких ошибок, было вызвано тем-то и тем-то… Можно попробовать то-то и то-то»


      1. alexkunin
        20.11.2016 16:19

        Отличный подход, кстати. Но сложность реализации зашкаливает, причем почти наверняка понадобится человек или команда, анализирующая статистику. И обязательно найдется группа народу, которую паранойя заставит писать гневные статьи про «несанкционированный сбор телеметрии» и т.п.

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


      1. Lure_of_Chaos
        20.11.2016 17:05
        +3

        Очень важно дать и техническую информацию (код ошибки, системное сообщение, информация о месте возникновения -желательно со стектрейсом, если это возможно), и рекомендации обычному пользователю — и при этом не выставлять пользователя идиотом.
        Возможно, я мнителен, но раздражают советы класса «убедитесь, что компьютер включен», что наблюдалось (да и наблюдается) особенно у МС: например, IE — сейчас уже более осмысленные сообщения при обрывах связи, но были достаточно раздражающие сообщения. Что там усугубляет — наличие кнопочки «исправить проблемы подключения», результатом которого обычно является сообщение либо «у вас все хорошо» (а проблема остается) либо «у вас нет соединения» — при этом вопрос «почему?» остается.


        1. Deosis
          21.11.2016 07:37

          В МС дают такие советы из-за большого числа гневных звонков о нерабочем IE после отключения электричества в городском районе.


    1. alexkunin
      20.11.2016 16:13
      +2

      Ошибки случаются. Какой бы тон не выбрал разработчик, этот тон может не совпасть с ситуацией, и у пользователя будет либо батхерт, либо неполное осознание серьезности. Опечатался в пароле на сайте с мультиками — «Доступ запрещен, аутентификация провалилась, возможно несанкционированное проникновение». Прижал тормоз в машине на крутом повороте на 120 км/ч — «Упс, датчичек что-то не отвечает, попробуйте еще разочек».

      А вот про подробность ошибок и их полезность — тут верно, этого недостает. Только вот сделать хорошее сообщение часто очень непросто. Особенно если исключение ловится где-то на самом высоком уровне. Коду, конструирующему текст сообщения, нужно бы знать, что именно означает «Ошибка доступа (3)» в контексте конкретного действия: закончились сокеты в системе? файл защищен по записи? или даже по чтению? или файл в порядке, но пользователь вдруг лишился привилегий? или файл кто-то зашифровал?

      Плюс, читающий сообщение может быть как экспертом («Файл тырыпыры защищен по записи, поправьте» — человек в секунду решает проблему), так и профаном («Ошибка 404, файл не найден» — «и чо мне делать с этим? где мои мультики??»).

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

      В общем, мне очень нравятся понятные и полезные (сразу ясно, что делать) сообщения об ошибках. Но как разработчик я понимаю, что реализовать такое — часто очень сложно и затратно.

      (Странно, скриншот с БСОД-ом от NT 4.0 озаглавлен как «MS DOS».)


      1. vintage
        20.11.2016 17:11
        -5

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


        1. alexkunin
          20.11.2016 17:47
          +2

          Я и не призываю прятать код ошибки. Только вот «что-то пошло не так» может означать «наш сервер №12345 накрылся, поэтому ваша транзакция не прошла — попробуйте еще раз, и балансировщик вас перебросит на рабочий сервер». Ну и зачем профану это объяснение? Для него смысл останется тем же: «попробуйте еще раз через пару минут».

          Но если все же ему интересно — гугл (или знакомый эксперт) в помощь. Если же код ошибки спрятан — может, программист недоглядел/поленился, а может компания не хочет выдавать никакой конкретики о своих ошибках. И это ее право, чесговоря.


          1. vintage
            20.11.2016 17:59
            -3

            Затем, чтобы при разговоре со службой поддержки / знакомым экспертом / гуглом получить разумный ответ и вариант обхода проблемы вида "Вы делаете запросы в такое-то время, когда на сервере обычно происходит обновление приложения, поэтому части запросов может не повести. Просто повторите запрос, при получении такой ошибки, пока мы не научились обновлять софт без остановки сервиса."


            1. vedenin1980
              20.11.2016 18:04
              +3

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


              1. vintage
                20.11.2016 18:27
                -3

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


                1. terryP
                  20.11.2016 18:47
                  +1

                  Тогда и сообщения пользователей уйдут в тот же завал. Вы просто не работали в серьезных компаниях (банки и т.п. фин. бизнес), там если не шевелиться в области безопасности накроется весь бизнес.


                  1. vintage
                    20.11.2016 19:38

                    Это хорошо, что в некоторых компаниях процессы отлажены, людей хватает и каждый из них — Профессионал, а продукт отлажен настолько, что ошибка в нём — это событие века.


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


            1. alexkunin
              20.11.2016 18:06
              +1

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


              1. vintage
                20.11.2016 18:44
                -1

                А может быть и "для вашего аккаунта заблокирована возможность Х, которая обрабатывается сервером 12345, поэтому повторять позже бесполезно, а необходимо попросить администратора вашего аккаунта включить эту опцию", и сотня других причин. В идеальном мире, конечно, все возможные причины и пути решения будут перечислены в тексте ошибки. Но в реальном — ошибки являются следствием исключительных, не предусмотренными программистами, ситуаций.


                1. alexkunin
                  20.11.2016 18:55
                  +2

                  Пример понятен, но это не ошибка, а ответ. В смысле, под ошибкой в данной статье понимается исключение (на сколько я могу судить), т.е. нечто непредвиденное, вроде умершего сервера или помехи в канале связи. А отсутствие права сделать что-то — это ситуация предвиденная, человек получил отлуп вполне закономерно. Конечно же, там обязано присутствовать описание этого состояния — это же часть бизнес-процесса.

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


          1. vedenin1980
            20.11.2016 18:00
            +3

            Если же код ошибки спрятан — может, программист недоглядел/поленился,

            Чем детальнее сообщения ошибках вебсервиса, тем проще работа хакера. Даже выдача код ошибки это на самом деле огромная дыра в безопасности, всякие sql инъекции и переполнения стека проводятся в разы легче. Даже если хакер не знает что код ошибки реально означает, он может перебором добиваться разных кодов ошибок и определять успешность своих атак.


            а может компания не хочет выдавать никакой конкретики о своих ошибках. И это ее право, чесговоря.

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


            «наш сервер №12345 накрылся, поэтому ваша транзакция не прошла — попробуйте еще раз, и балансировщик вас перебросит на рабочий сервер»

            Пользователю-профессионалу это все равно ничего не даст (равносильно что-то случилось, попробуйте ещё раз), а вот хакеру будет очень полезно.


            1. vintage
              20.11.2016 18:22
              +1

              Даже выдача код ошибки это на самом деле огромная дыра в безопасности

              Это не дыра в безопасности. Дыра в безопасности — это склеивание sql строк без экранирования, отсутствие проверок при обращении к памяти и тому подобное. А скрытие подробностей ошибки — это так, присыпание дыр листочками.


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

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


              Пользователю-профессионалу это все равно ничего не даст (равносильно что-то случилось, попробуйте ещё раз), а вот хакеру будет очень полезно.

              Пользователь-профессионал сможет догадаться, что кавычку надо заэкранировать, чтобы запрос сейчас прошёл, решив тем самым свою проблему. И сообщит в службу поддержки о возможной SQL инъекции, тем самым решив проблемы других пользователей и самого сервиса. А служба поддержки в срочном порядке сообщит ответственному программисту, что надо залатать дыру, а не закинет сотый тикет вида "изредка возникает 500 ошибка, поди разберись".


              1. vedenin1980
                20.11.2016 18:56
                +3

                "Вот вам стектрейс, настройки сервера такие, сможете придумать как это эксплуатировать — получите сумму такую-то".

                Угу, даже самые большие вознаграждения за найденные уязвимости в десятки раз меньше того что предлагают на черном рынке или конкуренты. Если вас уже ломают, хакеру ваши предложения будут не интересны в 90% случаев.


                А скрытие подробностей ошибки — это так, присыпание дыр листочками.

                Ошибки есть в любом софте, как бы он не защищался, облегчать работу хакера в серьезном сервисе даже на мизерную часть прост глупо. А открытость вовсе не означает что на безопасность не забьют.


                1. vintage
                  20.11.2016 19:51

                  Если вас уже ломают, хакеру ваши предложения будут не интересны в 90% случаев.

                  Значит надо предлагать в 10 раз больше, чтобы хакеру было выгоднее быть белым, а не чёрным. Это же рынок.


                  А открытость вовсе не означает что на безопасность не забьют.

                  Конечно, но мало кто будет ковыряться в носу, когда на него все смотрят. :-)


            1. Lure_of_Chaos
              21.11.2016 13:58

              Даже выдача код ошибки это на самом деле огромная дыра в безопасности

              Ну-ну. Пахнет сокрытием самого факта ошибки: «Ошибка? В нашем ПО? Быть не может, это нормально, а Вы там не ковыряйте ничего, чтобы не ломалось!»
              Если уж так не хочется выдавать тех.инфо, то на худой конец можно шифровать, чтобы спецы потом расшифровали всю важную информацию.


      1. vedenin1980
        20.11.2016 17:50
        +2

        В общем, мне очень нравятся понятные и полезные (сразу ясно, что делать) сообщения об ошибках. Но как разработчик я понимаю, что реализовать такое — часто очень сложно и затратно.

        Да не только в сложности дело. Детальное сообщение об ошибках это огромная дыра в безопасности для хакера. Такой вебсервис не пройдет ни один серьезный аудит безопасности, поэтому кроме "Упс" они ничего не могут сказать.


        1. alexkunin
          20.11.2016 18:00
          +1

          Совершенно с вами согласен, вычистить всю приватщину из сообщения — так еще задачка. И может гугл просто не хочет вкладывать кучу времени и денег в подробные, красивые, безопасные и понятные разъяснения для того мизерного процента операций, который закончится ошибкой. Сохранили дамп у себя на сервере? Послали автоматическое сообщение инженерам? Ну и хватит.


      1. vorphalack
        21.11.2016 08:56
        +1

        кстати, там во-1х 3.1 (интересно где такой скрин автор вообще нашел?), во-2х автор оригинального текста там вообще сморозил редкостную херню — «Oh yeah, duh, ff0a8e6c shouldn’t have been pointing to HAL.DLL!», ну а в-3х, мне тоже интересно какая связь между досом и НТшкой, но судя по тому что текст написан без малого пять лет назад, мы этого уже не узнаем.


        1. alexkunin
          21.11.2016 09:59
          +1

          Не поверите, раза 3 вчера перепроверил версию на скриншоте. Пора глазам коррекцию делать…

          Про хал.длл — автор стебнулся, наверное, типа офигенно полезное сообщение об ошибке — по такому-то адресу найдена такая дллка. Так себе шуточка. Но он прав в каком-то смысле — самое (единственно?) полезное для простого смертного находится в последних строчках: «перезагрузите комп; не помогло? найдите админа». Ну, и собственно код ошибки обычный человек в первых строках не распознает, так как много похожего шума на экране.


          1. vorphalack
            22.11.2016 04:18

            ну справедливости ради, до вин2к включительно, оные системы ставили либо продвинутые пользователи, либо пользоватеЛЯМ, хотя, конечно, 2/3 инфы на этом скриншоте имеют смысл только для сотрудников мс, если вообще — INACCESSIBLE_BOOT_DEVICE обычно получалось сдуру, как я помню.


            1. alexkunin
              22.11.2016 11:23

              Ну да, это ж была Windows NT Workstation (или Server — для 3.1 и 4.0 только по два эдишна было) — совсем не для домашних пользователей. Для домашних был дос и 3.1/3.11 (не-NT), 95, 98…

              А INACCESSIBLE_BOOT_DEVICE частенько случался — если сменить материнку (чипсет другой), или винт в другой комп вставить, или винт на другой порт перевесить, или дрова случайно снести, или в биосе LBA-флажок какой-нибудь переставить, или линуксом разделы переделать чуть-чуть. Винда была страшно чувствительной ко всему такому.


              1. vorphalack
                22.11.2016 15:58

                еще точно был NT4 Terminal Server Edition, но это совсем зло.

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


      1. alex_zzzz
        22.11.2016 12:55

        Тоже не угадал. Там ведь латинским по синему написано: Windows NT 3.1.


        1. alexkunin
          22.11.2016 13:01

          Боян, всего лишь одним комментарием выше по ветке.


    1. arvitaly
      20.11.2016 21:29
      +2

      Если вы знаете, что посоветовать пользователю во время неизвестной ошибки, то это вполне известная ошибка.
      Известных ошибок в production быть не должно.
      Технический лог пользователю ничем не поможет, а хорошим тоном может быть номер ошибки и контакт, с которыми можно обратиться в поддержку, но никак не куча абракадабры.


      1. vintage
        20.11.2016 22:44

        На момент написания кода об этой ошибке было не известно. А может было известно, но по какой-то причине не запилили (в идеальном мире, конечно, таких причин нет).


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


        За примером далеко ходить не надо — GeForce Experience. Падает через пару минут после загрузки. Никаких подсказок не даёт, почему именно на моей системе она падает. На других видимо не падает, раз уже который месяц это не исправляют.


        1. alibertino
          21.11.2016 00:10
          +1

          > На момент написания кода об этой ошибке было не известно.
          Именно поэтому невозможно подстелить солому, как вы хотите, т.е. рассказать что произошло, кроме как технических логов.
          > А абракадабра, зачастую, не понятна и самим программистам
          Причем тут создатели программы, они могут логгировать эти ошибки без показа их пользователям.
          > Падает через пару минут после загрузки. Никаких подсказок не даёт, почему именно на моей системе она падает.
          Не думаю, что куча чужих бектрейсов поможет 9999999 пользователей из 1000000. А последний потратит месяц или отправит багрепорт? И в GeForce (как и в большинстве программ) есть отправка логов.


  1. VovanZ
    20.11.2016 16:12
    +10

    Автор из тех странных людей, которые заставляют программистов галстуки на работе носить.


  1. KJouflay
    20.11.2016 16:12
    +4

    image

    Навеяло почему-то.


  1. Lure_of_Chaos
    20.11.2016 16:54
    +7

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


  1. Barafu
    20.11.2016 17:12
    +6

    Если человек шлёт письма на миллион и не имеет при себе 3 совершенно разных мобильника трёх разных операторов, то Упс! Хорошо, наверное, быть сказочным долбокряком.


    1. TheCreator
      22.11.2016 12:56

      Сложно представить человека, шлющего письма на миллион, обложившегося тремя мобильниками.


  1. 776166
    20.11.2016 18:35
    +3

    Ошибка есть ошибка. Расшифровывать её, или попросить зайти позже, это всегда зависит от контекста. Давать расшифровку или нет, зависит от типа ошибки и способа её получения.

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

    Единого рецепта правильного сообщения об ошибки, нет. Главное, что бы про это знал разработчик и максимально быстро исправил. То, что ты — доблаёб и забыл зарядить все свои 100500 гаджетов, и в аэропорту они одновременно сдохли под плохим бесплатным вайфаем — не проблема сайта. Почему почти все почти всего думают, что им что-то должны в лучшем виде всегда?


  1. ProstoTyoma
    20.11.2016 22:05
    +1

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


  1. Serabas
    21.11.2016 06:14

    Не занудства ради спрошу: а кто-нибудь пробовал такую схему?
    1. Приложение выбросило исключение
    2. Собрало информацию об ошибке
    3. Положило в базу, выдав при этом уникальный идентификатор (во избежание длинных чисел можно использовать, например словарь лёгких слов или что-то ещё, облегчающее передачу разными способами)
    4. Сообщило об этом пользователю, показав этот самый идентификатор, краткую информацию и контактные данные компании.
    5. Пользователь связывается с администрацией, назвав выданный ему идентификатор.
    6. Администрация передаёт запрос программистам, которые изучают запись в базе об этой ошибке и решают проблему.

    Когда я работал в местном купонаторе, с нами (через наш колл-центр) связывались пользователи и партнёры при возникновении каких-либо вопросов по сайту, будь то ошибки или какие-либо другие непонятности. И происходило это на удивление часто (моей разработкой был кабинет партнёра и по нему звонили ещё чаще, чем по фронтендовым вопросам).


    1. Deosis
      21.11.2016 07:44

      Если это веб-приложение, то шаги 4-6 можно заменить одним:
      0. Настроить уведомление при вставке информации об ошибках в базу.


      1. Serabas
        21.11.2016 07:46

        Как один из вариантов развития событий ;)


      1. Germanets
        21.11.2016 09:30

        Кроме настройки уведомления необходимо ещё и продумать фильтрацию ошибок, проверку их критичности, наличия ранее точно таких же обработанных ошибок(например, создана задача в баг-трекере) и т. д., в результате на уведомления придётся либо забить, либо выделить отдельного человека на их обработку.
        Эту задачу достаточно хорошо решают пользователи — если ошибка критична для пользователя — он о ней сообщит, если нет — значит мы о ней и не узнаем. Да, вариант несколько порочный, в плане — пользователь может «обидиться и уйти», но для особо критичного функционала и так должны быть автоматические проверки.


    1. Germanets
      21.11.2016 09:24

      Видел несколько раз вариант с отображением ID и текстом — «Если обратитесь в техподдержку по этому поводу, пожалуйста, укажите данный ID ошибки», то есть как минимум пункты 1 — 5 реализованы(увы, запамятовал, где именно).
      В сервисах анти-ддос также защиты частенько отображаются идентификаторы, которые по идее можно будет проверить в случае если система по какой-то причине ошибётся и закроет доступ «нормальному» пользователю.


    1. SirEdvin
      21.11.2016 09:46

      Возможно, нечто подобное можно сделать через Sentry.


  1. jok40
    21.11.2016 08:18
    +4

    В MS-DOS не было синих экранов смерти. А на скриншоте показан BSOD от Windows 3.1. И в нём, кстати, написано, что пропал доступ к загрузочному диску, а вовсе не то, что

    ff0a8e6c не должен был указывать на HAL.DLL

    По мне так этот BSOD — достаточно информативное сообщение.


    1. jok40
      21.11.2016 08:45
      +2

      Поправочка. Windows 3.1 была 16-разрядной, а на скриншоте 32-разрядные адреса. Так что это BSOD от какого-то прародителя Windows NT — от Windows NT 3.1.


      1. rogoz
        22.11.2016 12:57

        На нём написано Windows NT 3.1…
        А Windows 3.1 вполне себе работала в 32-разрядном режиме, просто не всё было 32-разрядным.


  1. ComradeAndrew
    21.11.2016 08:59

    Лично меня раздражают только умники, которые всегда считают, что в гигантах IT индустрии работают идиоты и не знают что делают. Это наивность такая или гордыня? Нет, я правда не понимаю зачем об этом вот в таком виде высказываться.
    В IT существует жесткая конкуренция, что и способствует направлению и методам развития. Не нравится такой подход — найдите подходящий для вас сервис. Если это единственный, который вам подходит по каким-то причинам, но в чем-то не устраивает, так это и не должно быть идеально во всем. Всем угодить невозможно. А IT гиганты работают с огромным числом клиентов/пользователей и от их методов и качества зависит их прибыль.


    1. jok40
      21.11.2016 09:36
      +1

      Лично меня раздражают только умники, которые всегда считают, что в гигантах IT индустрии работают идиоты и не знают что делают.
      Довольно странный вывод из статьи Вы сделали. По мне так посыл статьи диаметрально противоположный: в гигантах IT-индустрии работают умники, которые всех без исключения пользователей считают идиотами. И если этих гигантов время от времени не пинать подобными статьями, то в конце концов они окончательно забьют болт на юзеров и перестанут воспринимать конструктивную критику.


    1. SirEdvin
      21.11.2016 09:48

      В IT существует жесткая конкуренция, что и способствует направлению и методам развития.

      Назовите альтернативную операционную систему, на которой можно поиграть нормально в WoW, Civ 6 и еще несколько игр, используя клиенты Curse, Discord помимо Windows.


      Назовите браузер, который можно активно и удобно использовать, но не Edge, Mozilla или Chrome.


      Ну и так далее. "Конкуренция".


  1. Bimawa
    21.11.2016 12:25

    все из-за того, что компьютерами стали пользоваться не только программисты. :)


  1. tandzan
    22.11.2016 12:58

    Имхо это все укоренилось в самой западной культуре. Нужно улыбаться, излучать уверенность и дружелюбие, иначе ты лузер. Все наверно наблюдали, как на прошедших выборах в США несколько пожилых людей пыжились, пытаясь изобразить своего в доску парня. Сегодня только смотрел доклад Александреску на CppCon, был слегка в шоке, первое впечатление: «это какой-то клоун под наркотой».


  1. ifvrt12
    22.11.2016 12:59

    Помню такой момент, когда на внутреннем ПО на работе, разработчик (который буквально в соседнем зданиии сидит) просто поленился вписать текст ошибок в базу, откуда интерфейс рассчитанный на открытие в браузере забирал записи.

    Никогда не забуду надписи вроде «Text for error #8 here» при каких-то обычных действиях, или что-то «Error #102 — try again or contact support». Обычно, решение было простым, и пользователь запросто мог бы решить проблему сам, если бы вместо непонятного диалога, был нормальный текст ошибки.


  1. MaxxONE
    22.11.2016 12:59

    А что не так с приватным видео на youtube?


  1. psycholock
    22.11.2016 12:59

    Ага, как мне нравится на сайте «Юлмарта» — «Вы сломали наш сайт, но мы его уже чиним!»

    Перекладывание ответственности на пользователя, говорите?


  1. dilukhin
    22.11.2016 13:00

    Всё просто, системы вышли из младенческого возраста, когда обратная связь была на низшем уровне вида уа-уа агу-гу 80400000 2dc8312a HAL.DLL (почему кстати из BSOD взят именно ff0a8e6c? не понял), затем стали лепетать и сюсюкать на уровне гав, мяу, му, и теперь от них уже требуются что-то более вразумительное.
    Всегда старался максимально эргономично выводить сообщения об ошибках, ещё когда писал на VBA под Access, все корневые вызовы содержали On Error Goto (handler) а там модальное окно, подробное описание и предложение написать разработчику. Это как-то по-взрослому, имхо.


  1. CAJAX
    23.11.2016 12:00

    Какова вероятность, что увидев больше информации пользователь
    — пофиксит код на серверах гугла, фейсбука и айклауда
    — найдет ошибку, исправит её и сделает ПР в код хрома
    — исправит ошибку в проприетарных драйверах в винде (кстати, журналы ошибок пишутся, там больше деталей) или флеш
    — хакнет ютуб чтобы посмотреть частное видео
    — нарастит мощности ДЦ твиттера