Ошибка. Упс… возникла серверная ошибка и ваше письмо не отправилось.
Как в некоторые бросающие в дрожь моменты фильма «Американский психопат» это не очень различимое, бесстрастное сообщение от почты Gmail вонзает кинжал точно в моё сердце, мгновенно порождая отчаяние — что же пошло не так?
Несомненно, конечно, сейчас я посмотрю, что это за ошибка #001. И что?
От Google Chrome приходит сообщение об ошибке ещё бредовей, лучше от него не становится. Похоже на желание быть ещё одним куском хипстерского софта, который подражает иконкам «Макинтоша» 1984 года. Этот интерфейс смеётся вам в лицо, когда вы раздражены:
Вот, блин!
Что-то пошло не так в процессе отображения этой веб-страницы. Чтобы продолжить — перезагрузитесь, или откройте новую страницу.
Может быть, это часть какого-то величественного замысла технологического гиганта. В конце концов, Google является местом улыбок. Логотип со всеми цветами радуги и три сытных трапезы в день располагают работать с невероятной отдачей. Но, скажем справедливости ради, Гугл совсем не одинок в этом подходе: «упали — улыбнитесь», по-отношению к сообщениям об ошибках.
Microsoft, к сожалению, рассматривает вопрос о реализации того же миленького метода мышления в модернизации синего «экрана смерти», как части своей — в остальном, вдохновляющей — новой [на момент написания статьи — прим. пер.] операционной системы Windows 8:
Ваш ПК столкнулся с проблемой, которую не может решить и сейчас ему потребуется перезагрузка.
Синий «экран смерти» Windows 8.
Как хорошо-то! Не иначе как мой 14-летний племянник устроился в Редмонд сообщения об ошибках сочинять.
Но — какая удача — Microsoft даёт какое-то указание. Посмотрите сообщение об ошибке — «HAL_INITIALIZATION_FAILED»… Однако, как же, — это ведь и означает синий «экран смерти». Мой компьютер полностью накрылся.
Чтобы превзойти Гугл по «упсам», сайт XBOX от Microsoft вводит восклицание «Упс!» дважды в своё сообщение об ошибке: первый раз в заголовке и затем как первое слово в пояснении к заголовку. Очевидно, после того как сорвал чьи-то планы, лучшее, что можно сделать, это снова и снова восклицать «Упс!».
Упс! Упс, мобильный сайт XBOX не отконфигурирован для вашего устройства. Приносим извинения за неудобства, убедитесь, что вы посещаете сайт xbox.com на десктопе.
Ага, конечно — эту страничку я полайкаю.
И не надо думать, что в некоммерческой Mozilla Foundation этих миленьких странностей в сообщениях об ошибках в браузере Firefox нет.
Плагин Adobe Flash упал.
Фигурка Lego сожалеет, что вы не можете открыть ваш любимый сериал.
В такой момент всегда под рукой есть YouTube, не так ли? Миллионы забавных роликов, чтобы помочь нам расслабиться в трудной ситуации.
Данное видео приватно. Извините за это.
Facebook?
Что-то пошло не так. Мы работаем над тем, чтобы исправить это как можно скорее. Вы сможете попробовать снова спустя какое-то время.
Как насчёт музыки с Apple iCloud?
iCloud не может найти данную страницу. Пожалуйста, перепроверьте запрос или попробуйте позже.
Проверим Twitter?
Twitter вышел за пределы возможностей. Слишком много твитов! Пожалуйста, выдержите паузу и попробуйте снова.
Есть ли выход из этого приветливого чистилища?
Модная компания Plaxo — ваша адресная книга для жизни — не только также выбрала «упс», но и ввела другой уровень наведения таинственного страха. Но тсс … эта ошибка — «наш маленький секрет».
Похоже, есть проблема. Вот что я вам скажу — дайте нам время устранить её, и пусть это будет наш маленький секрет. Пожалуйста, подождите 30 секунд и попробуйте снова.
Что происходит?
Вы знаете, не так давно, когда что-то в программном обеспечении создавало трудности для пользователей, то у производителей программного обеспечения было блестящее безотказное и простое решение: добавить некоторое руководство в раздел справки. Вместо траты времени на то, чтобы сделать сложное простым и очевидным, производители софта скидывали ответственность на пользователя: «Гм, не знаем, как сделать просто, почитайте мануалы».
Теперь, похоже, есть другой, новый вид ужасно простого решения для глюков и ошибок, которые приводят людей в отчаяние: очаровательная улыбка. В конце концов, никого ведь не беспокоит, что вы разрушаете их жизнь, пока вы делаете это с улыбкой, не так ли?
Из фильма «Американский психопат»
Корни «упс»!
Надписи под карикатурным изображением жителя Нью-Йорка, появившейся в 1925 году, приписывают первое публичное появление «Упс!» («Whoopsie Daisy!»). Но реальные корни явления «опачки» можно увидеть в операционной системе Linux.
Пингвин 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.)
Когда мило — хорошо
Поймите меня правильно — в миленьких штучках нет ничего плохого.
Милашка!
(С сайта Cute overload)
Миленькое работает, когда…, когда вы не ждёте ничего конкретного в данной ситуации. Как, например, когда смотрите на очаровательного ребёнка.
Ой, лапушка, он наделал в штанишки!
Уй-ти-ти, он пукнул!
Ха-ха, он отрыгнул на меня!
Но когда есть ожидания, миленькое не работает. Как, например, с взрослыми.
Слушай, используй туалет … и туалетную бумагу.
Боже мой, какой неприятный запах!
Вам не лучше пойти домой?
Так, когда компания Google была ещё молодой, модернистской и стремительно растущей, их сообщения об ошибках были действительно забавными. Такие глупенькие очаровательные гуглеры!
Упс! Этого не должно было случиться.
Реакция агрегатора Google Reader
Необычно!
Но теперь, когда Гугл является зарегистрированной на бирже компанией стоимостью 186 млрд. долларов, на которую мы полагаемся в вопросах важного делового общения и которая может создавать или ликвидировать целые направления работы, их милые сообщения об ошибках выглядят почти столь же «мило» как на известных фотографиях совсем юный Билл Гейтс, бросающий дискеты у себя в офисе. Другими словами, остаётся страшноватое впечатление.
Отойти от границы допустимого
Язык сообщений об ошибках в старом программном обеспечении (например, в MS-DOS) был, как хорошо известно, недружелюбным к пользователю.
MS DOS
О, да, понятное дело, ff0a8e6c не должен был указывать на HAL.DLL!
Поэтому люди, озабоченные взаимодействием с пользователями, давали указания и рекомендации. За последние три десятилетия было написано множество статей о подготовке хороших сообщений об ошибках. Здесь. Здесь ещё одна. И здесь. И здесь. И здесь. И ещё одна — авторами с Yahoo! И другая, приравнивающая сообщения об ошибках к упущенной выручке. И ещё одна, о знаменитой 404-й…
Однако сегодняшние авторы сообщений об ошибках, претендующие на оскорбляющее остроумие, качнули маятник слишком далеко в обратную сторону. Общая рекомендация использовать естественный язык, чтобы преобразовать невнятное сообщение «Ошибка: переполнение стека», реализовалась не во что-то вежливое и понятное, а в глуповатое «Упс! Вот блин!».
Нам надо поубавить тон с зашкаливающе дружелюбного пониже — текущий уровень выглядит жутко. Существует ведь некоторая золотая середина, когда разработчики могут извиниться, а программное обеспечение может предоставить пользователю вежливую подсказку о том, что делать дальше. Веб-сайт, приложение, программное обеспечение — это ваш прокол. Помогите пользователю выполнить требуемую ему задачу КАК МОЖНО БЫСТРЕЕ.
Перефразируя известное высказывание ТВ-ведущего Джона Стюарта во время дебатов кандидатов в президенты США: «упс» — совсем не то слово из трёх букв, которое я выбрал бы.
Комментарии (79)
VovanZ
20.11.2016 16:12+10Автор из тех странных людей, которые заставляют программистов галстуки на работе носить.
Lure_of_Chaos
20.11.2016 16:54+7По мне, никакой паники и уж точно не издевательство, просто разработчики сочувствуют пользователю, у которого из-за них приложение упало в самый ответственный момент.
Barafu
20.11.2016 17:12+6Если человек шлёт письма на миллион и не имеет при себе 3 совершенно разных мобильника трёх разных операторов, то Упс! Хорошо, наверное, быть сказочным долбокряком.
TheCreator
22.11.2016 12:56Сложно представить человека, шлющего письма на миллион, обложившегося тремя мобильниками.
776166
20.11.2016 18:35+3Ошибка есть ошибка. Расшифровывать её, или попросить зайти позже, это всегда зависит от контекста. Давать расшифровку или нет, зависит от типа ошибки и способа её получения.
Попытаться поднять настроение пользователю какой-то весёлостью может быть лучше/равносильно/хуже распечатки полного стека Django. Кому-то это нужно, кого-то это раздражает. Кому-то пофигу.
Единого рецепта правильного сообщения об ошибки, нет. Главное, что бы про это знал разработчик и максимально быстро исправил. То, что ты — доблаёб и забыл зарядить все свои 100500 гаджетов, и в аэропорту они одновременно сдохли под плохим бесплатным вайфаем — не проблема сайта. Почему почти все почти всего думают, что им что-то должны в лучшем виде всегда?
ProstoTyoma
20.11.2016 22:05+1Ещё одна аналогичная и очень старая проблема: недоступность функций в программах. Например, неактивный пункт меню, который делает то, что тебе прямо щас надо сделать. И я не встречал ПО, которое объясняло, почему в данный момент именно этот пункт недоступен. Пол дня в гугле помогают понять, что это потому что какой-то драйвер не тот, железка не той версии, фаза луны не та итп.
В наше время классических меню всё меньше, но проблема осталась. Действия просто пропадают из тех мест, где они должны быть. И опять без объяснений.
Serabas
21.11.2016 06:14Не занудства ради спрошу: а кто-нибудь пробовал такую схему?
1. Приложение выбросило исключение
2. Собрало информацию об ошибке
3. Положило в базу, выдав при этом уникальный идентификатор (во избежание длинных чисел можно использовать, например словарь лёгких слов или что-то ещё, облегчающее передачу разными способами)
4. Сообщило об этом пользователю, показав этот самый идентификатор, краткую информацию и контактные данные компании.
5. Пользователь связывается с администрацией, назвав выданный ему идентификатор.
6. Администрация передаёт запрос программистам, которые изучают запись в базе об этой ошибке и решают проблему.
Когда я работал в местном купонаторе, с нами (через наш колл-центр) связывались пользователи и партнёры при возникновении каких-либо вопросов по сайту, будь то ошибки или какие-либо другие непонятности. И происходило это на удивление часто (моей разработкой был кабинет партнёра и по нему звонили ещё чаще, чем по фронтендовым вопросам).Deosis
21.11.2016 07:44Если это веб-приложение, то шаги 4-6 можно заменить одним:
0. Настроить уведомление при вставке информации об ошибках в базу.Germanets
21.11.2016 09:30Кроме настройки уведомления необходимо ещё и продумать фильтрацию ошибок, проверку их критичности, наличия ранее точно таких же обработанных ошибок(например, создана задача в баг-трекере) и т. д., в результате на уведомления придётся либо забить, либо выделить отдельного человека на их обработку.
Эту задачу достаточно хорошо решают пользователи — если ошибка критична для пользователя — он о ней сообщит, если нет — значит мы о ней и не узнаем. Да, вариант несколько порочный, в плане — пользователь может «обидиться и уйти», но для особо критичного функционала и так должны быть автоматические проверки.
Germanets
21.11.2016 09:24Видел несколько раз вариант с отображением ID и текстом — «Если обратитесь в техподдержку по этому поводу, пожалуйста, укажите данный ID ошибки», то есть как минимум пункты 1 — 5 реализованы(увы, запамятовал, где именно).
В сервисах анти-ддос также защиты частенько отображаются идентификаторы, которые по идее можно будет проверить в случае если система по какой-то причине ошибётся и закроет доступ «нормальному» пользователю.
jok40
21.11.2016 08:18+4В MS-DOS не было синих экранов смерти. А на скриншоте показан BSOD от Windows 3.1. И в нём, кстати, написано, что пропал доступ к загрузочному диску, а вовсе не то, что
ff0a8e6c не должен был указывать на HAL.DLL
По мне так этот BSOD — достаточно информативное сообщение.jok40
21.11.2016 08:45+2Поправочка. Windows 3.1 была 16-разрядной, а на скриншоте 32-разрядные адреса. Так что это BSOD от какого-то прародителя Windows NT — от Windows NT 3.1.
rogoz
22.11.2016 12:57На нём написано Windows NT 3.1…
А Windows 3.1 вполне себе работала в 32-разрядном режиме, просто не всё было 32-разрядным.
ComradeAndrew
21.11.2016 08:59Лично меня раздражают только умники, которые всегда считают, что в гигантах IT индустрии работают идиоты и не знают что делают. Это наивность такая или гордыня? Нет, я правда не понимаю зачем об этом вот в таком виде высказываться.
В IT существует жесткая конкуренция, что и способствует направлению и методам развития. Не нравится такой подход — найдите подходящий для вас сервис. Если это единственный, который вам подходит по каким-то причинам, но в чем-то не устраивает, так это и не должно быть идеально во всем. Всем угодить невозможно. А IT гиганты работают с огромным числом клиентов/пользователей и от их методов и качества зависит их прибыль.jok40
21.11.2016 09:36+1Лично меня раздражают только умники, которые всегда считают, что в гигантах IT индустрии работают идиоты и не знают что делают.
Довольно странный вывод из статьи Вы сделали. По мне так посыл статьи диаметрально противоположный: в гигантах IT-индустрии работают умники, которые всех без исключения пользователей считают идиотами. И если этих гигантов время от времени не пинать подобными статьями, то в конце концов они окончательно забьют болт на юзеров и перестанут воспринимать конструктивную критику.
SirEdvin
21.11.2016 09:48В IT существует жесткая конкуренция, что и способствует направлению и методам развития.
Назовите альтернативную операционную систему, на которой можно поиграть нормально в WoW, Civ 6 и еще несколько игр, используя клиенты Curse, Discord помимо Windows.
Назовите браузер, который можно активно и удобно использовать, но не Edge, Mozilla или Chrome.
Ну и так далее. "Конкуренция".
Bimawa
21.11.2016 12:25все из-за того, что компьютерами стали пользоваться не только программисты. :)
tandzan
22.11.2016 12:58Имхо это все укоренилось в самой западной культуре. Нужно улыбаться, излучать уверенность и дружелюбие, иначе ты лузер. Все наверно наблюдали, как на прошедших выборах в США несколько пожилых людей пыжились, пытаясь изобразить своего в доску парня. Сегодня только смотрел доклад Александреску на CppCon, был слегка в шоке, первое впечатление: «это какой-то клоун под наркотой».
ifvrt12
22.11.2016 12:59Помню такой момент, когда на внутреннем ПО на работе, разработчик (который буквально в соседнем зданиии сидит) просто поленился вписать текст ошибок в базу, откуда интерфейс рассчитанный на открытие в браузере забирал записи.
Никогда не забуду надписи вроде «Text for error #8 here» при каких-то обычных действиях, или что-то «Error #102 — try again or contact support». Обычно, решение было простым, и пользователь запросто мог бы решить проблему сам, если бы вместо непонятного диалога, был нормальный текст ошибки.
psycholock
22.11.2016 12:59Ага, как мне нравится на сайте «Юлмарта» — «Вы сломали наш сайт, но мы его уже чиним!»
Перекладывание ответственности на пользователя, говорите?
dilukhin
22.11.2016 13:00Всё просто, системы вышли из младенческого возраста, когда обратная связь была на низшем уровне вида уа-уа агу-гу 80400000 2dc8312a HAL.DLL (почему кстати из BSOD взят именно ff0a8e6c? не понял), затем стали лепетать и сюсюкать на уровне гав, мяу, му, и теперь от них уже требуются что-то более вразумительное.
Всегда старался максимально эргономично выводить сообщения об ошибках, ещё когда писал на VBA под Access, все корневые вызовы содержали On Error Goto (handler) а там модальное окно, подробное описание и предложение написать разработчику. Это как-то по-взрослому, имхо.
CAJAX
23.11.2016 12:00Какова вероятность, что увидев больше информации пользователь
— пофиксит код на серверах гугла, фейсбука и айклауда
— найдет ошибку, исправит её и сделает ПР в код хрома
— исправит ошибку в проприетарных драйверах в винде (кстати, журналы ошибок пишутся, там больше деталей) или флеш
— хакнет ютуб чтобы посмотреть частное видео
— нарастит мощности ДЦ твиттера
vintage
Самое печальное, когда тебе говорят "упс, что-то пошло не так", но при этом не говорят что именно пошло не так. Какая именно подсистема дала сбой? Может её отключить или поменять настройки или поменять на другую? Вместо того, чтобы сделать сообщения об ошибках понятными для всех, их делают непонятными ни для кого.
handicraftsman
У самого подобное. Потому я при каждой ошибке заставляю свой код выплёвывать бектрейсы и подобные вещи :D
vedenin1980
Тут разговор в основном о вебсервисах, а это просто мечта хакера, вебсервис выдающий стектрейсы и детальные ошибки.
vintage
Мечта хакера — "security by obscurity".
herr_kaizer
Прятанье логов в веб-сервисах — это не «security by obscurity». Это простой здравый смысл.
vintage
Как и любое другое прятанье, это — "security by obscurity". И наличие этого "obscurity" провоцирует программистов забивать на "security". А вот когда работаешь "в открытую", то просто не можешь "забить", потому, что знаешь, что это будет тут же обнаружено.
terryP
Ок, ссылку на сервис банка, компании уровня гугла и т.п. серьезного бизнеса который сообщал все «в открытую» от логов до инфраструктуры. Или вы лично считаете себя умнее всех экспертов по безопансоти в мире?
vintage
Взывание к авторитету и сливание кармы — так себе аргументы.
Я ни разу в жизни не допустил ни SQL инъекций, ни XSS уязвимостей. Не потому, что я такой внимательный или наблюдательный или иксперт по безопасности, а потому, что строю архитектуру так, чтобы эти уязвимости исключить. Поэтому мне всегда было смешно наблюдать, как многие борются за безопасность путём "скрытия текста ошибки", "фильтрации SQL конструкций во вводе пользователя" и тому подобными простыми и неэффективными способами.
lostpassword
vintage
Оттуда же, откуда вы знаете, что не кусали свой локоть. Я просто не собирал ни SQL, ни HTML из строк. А когда всё же приходилось — использовал инструменты с автоэкранированием.
3aicheg
«Security through obscurity» во многих случаях вполне себе работает. Говорю это как человек, в отличие от вас, действительно ни разу в жизни не допустивший ни SQL-инъекций, ни XSS-уязвимостей. Работает, может быть, плохо и недолго, но работает. Характерный пример: когда находят уязвимость и собираются публиковать, как правило, перед публикацией посылают описание производителю и дают время на устранение уязвимости.
rkfg
Недавно была атака на банки, так вот Сбербанк Онлайн выдавал пусть и не бектрейсы, но исключения Java с указанием имён пэкейджей и классов. В частности, про невозможность Hibernate подключиться к БД или ошибки рефлексии. Не то чтобы прямо что-то критичное, но я несколько удивился. Ещё раньше на запуске нынешней системы на Java у них и трейсы вылетали целиком, сейчас, вроде, убрали.
tmin10
Когда сбербанк онлайн был по ддосом, он почему-то вывел произошедшее исключение, интересно, почему оно не обработалось:
Error 500: java.lang.SecurityException: org.hibernate.exception.GenericJDBCException: Cannot open connection
herr_kaizer
Забивать на «security» провоцирует отсутствие аудита и непрофессионализм. Никакой безопасник никогда не разрешит вывешивать логи ошибок на всеобщее обозрение.
terryP
«security by obscurity» это использовать явно дырявые решения. А кричать на каждом углу что у вас в сейфе лежит сто миллионов долларов наличкой в расчете что сейф никто не сможет взломать это просто глупость.
vintage
Про миллион долларов наличкой все и так знают. Вопрос лишь в том, потратить ли деньги и время на полноценную и комплексную систему защиты, которая сработает в том числе и от "своих", или же просто закрасить все окна чёрной краской, чтобы никто снаружи не мог подглядеть где находится сейф.
VovanZ
"security by obscurity" не значит, что obscurity это плохо. Это значит, что когда obscurity — единственный способ обеспечения безопасности — вот это плохо.
vintage
О том и речь, что "obscurity" вообще не обеспечивает никакого "security". Это как иконки на торпеде — в лучшем случае никак не повлияет, а в худшем даст ложную уверенность.
valera5505
Я вот одного понять не могу, почему вы считаете это взаимоисключающими вещами? То есть никто не может и сделать безопасно, и спрятать логи?
TheShock
Простите, но ошибка, которая крушит браузер — на клиентской стороне. И бектрейс хакеру никакой дополнительной информации не даст — у него и так уже код весь есть.
Fedcomp
Код в разработке и так должен выплевывать бэктрейсы, а на проде можно использовать вещи вроде rollbar чтобы видеть ошибки.
TsarS
Что-нибудь вроде «По нашей статистике, 85% таких ошибок, было вызвано тем-то и тем-то… Можно попробовать то-то и то-то»
alexkunin
Отличный подход, кстати. Но сложность реализации зашкаливает, причем почти наверняка понадобится человек или команда, анализирующая статистику. И обязательно найдется группа народу, которую паранойя заставит писать гневные статьи про «несанкционированный сбор телеметрии» и т.п.
А еще я видел в какой-то серьезной софтине (что-то там про верификацию железа) ошибки в консоли сразу линковались к поиску в гугле — т.е. по нажатию открывались результаты поиска по коду ошибки. Всего-то упростили скопировать-открыть-поиск-вставить, но если делаешь это 100 раз на дню — готов разрабу коньяк поставить за такую мелочь.
Lure_of_Chaos
Очень важно дать и техническую информацию (код ошибки, системное сообщение, информация о месте возникновения -желательно со стектрейсом, если это возможно), и рекомендации обычному пользователю — и при этом не выставлять пользователя идиотом.
Возможно, я мнителен, но раздражают советы класса «убедитесь, что компьютер включен», что наблюдалось (да и наблюдается) особенно у МС: например, IE — сейчас уже более осмысленные сообщения при обрывах связи, но были достаточно раздражающие сообщения. Что там усугубляет — наличие кнопочки «исправить проблемы подключения», результатом которого обычно является сообщение либо «у вас все хорошо» (а проблема остается) либо «у вас нет соединения» — при этом вопрос «почему?» остается.
Deosis
В МС дают такие советы из-за большого числа гневных звонков о нерабочем IE после отключения электричества в городском районе.
alexkunin
Ошибки случаются. Какой бы тон не выбрал разработчик, этот тон может не совпасть с ситуацией, и у пользователя будет либо батхерт, либо неполное осознание серьезности. Опечатался в пароле на сайте с мультиками — «Доступ запрещен, аутентификация провалилась, возможно несанкционированное проникновение». Прижал тормоз в машине на крутом повороте на 120 км/ч — «Упс, датчичек что-то не отвечает, попробуйте еще разочек».
А вот про подробность ошибок и их полезность — тут верно, этого недостает. Только вот сделать хорошее сообщение часто очень непросто. Особенно если исключение ловится где-то на самом высоком уровне. Коду, конструирующему текст сообщения, нужно бы знать, что именно означает «Ошибка доступа (3)» в контексте конкретного действия: закончились сокеты в системе? файл защищен по записи? или даже по чтению? или файл в порядке, но пользователь вдруг лишился привилегий? или файл кто-то зашифровал?
Плюс, читающий сообщение может быть как экспертом («Файл тырыпыры защищен по записи, поправьте» — человек в секунду решает проблему), так и профаном («Ошибка 404, файл не найден» — «и чо мне делать с этим? где мои мультики??»).
И, кстати, если код достаточно умный, чтобы точно описать проблему, может он еще и решить ее сможет во многих случаях? Ну, там, права подправить, если возможно, или исправить опечатку в адресе.
В общем, мне очень нравятся понятные и полезные (сразу ясно, что делать) сообщения об ошибках. Но как разработчик я понимаю, что реализовать такое — часто очень сложно и затратно.
(Странно, скриншот с БСОД-ом от NT 4.0 озаглавлен как «MS DOS».)
vintage
У любого "профана" есть знакомый "эксперт", который поможет первому расшифровать хитрое сообщение об ошибке, если оно содержит хоть какую-то конкретику, а не голый "что-то пошло не так".
alexkunin
Я и не призываю прятать код ошибки. Только вот «что-то пошло не так» может означать «наш сервер №12345 накрылся, поэтому ваша транзакция не прошла — попробуйте еще раз, и балансировщик вас перебросит на рабочий сервер». Ну и зачем профану это объяснение? Для него смысл останется тем же: «попробуйте еще раз через пару минут».
Но если все же ему интересно — гугл (или знакомый эксперт) в помощь. Если же код ошибки спрятан — может, программист недоглядел/поленился, а может компания не хочет выдавать никакой конкретики о своих ошибках. И это ее право, чесговоря.
vintage
Затем, чтобы при разговоре со службой поддержки / знакомым экспертом / гуглом получить разумный ответ и вариант обхода проблемы вида "Вы делаете запросы в такое-то время, когда на сервере обычно происходит обновление приложения, поэтому части запросов может не повести. Просто повторите запрос, при получении такой ошибки, пока мы не научились обновлять софт без остановки сервиса."
vedenin1980
Слишком небезопасно, обычному пользователю (даже профессионалу) это поможет меньше банальной автоматической отправки сообщения и логов на сервер, а вот хакеру поможет и сильно.
vintage
Вы уже 4 раз повторили одно и то же. Не надо так.
А банальная "автоматическая отправка сообщений и логов" обычно упирается в "завал, который некому и некогда разбирать". Пока петух не клюнет — никто особо не шевелится.
terryP
Тогда и сообщения пользователей уйдут в тот же завал. Вы просто не работали в серьезных компаниях (банки и т.п. фин. бизнес), там если не шевелиться в области безопасности накроется весь бизнес.
vintage
Это хорошо, что в некоторых компаниях процессы отлажены, людей хватает и каждый из них — Профессионал, а продукт отлажен настолько, что ошибка в нём — это событие века.
К сожалению, в большинстве случаев, пользователь работает с продуктами куда более приземлённых компаний, где дедлайн уже вчера, бюджет потрачен, набрали стажёров, куча легаси, рефакторинг в следующий раз, тестирование вручную, безопасность по требованию. И это не мелкие компании, а всякие фейсбуки со вконтактами.
alexkunin
Все верно. Уберите сарказм и приватную информацию (время обновления серверов) из своего сообщения, и получите тот же текст, что и на нескольких скринштах в статье: случилось непредвиденное, ваши желания превысили наши возможности, подождите немного и попробуйте еще раз.
vintage
А может быть и "для вашего аккаунта заблокирована возможность Х, которая обрабатывается сервером 12345, поэтому повторять позже бесполезно, а необходимо попросить администратора вашего аккаунта включить эту опцию", и сотня других причин. В идеальном мире, конечно, все возможные причины и пути решения будут перечислены в тексте ошибки. Но в реальном — ошибки являются следствием исключительных, не предусмотренными программистами, ситуаций.
alexkunin
Пример понятен, но это не ошибка, а ответ. В смысле, под ошибкой в данной статье понимается исключение (на сколько я могу судить), т.е. нечто непредвиденное, вроде умершего сервера или помехи в канале связи. А отсутствие права сделать что-то — это ситуация предвиденная, человек получил отлуп вполне закономерно. Конечно же, там обязано присутствовать описание этого состояния — это же часть бизнес-процесса.
На практике, конечно, ошибки и ответы смешиваются, и проверка возможности что-то сделать реально может закончиться исключением. Вроде так их использовать не рекомендуется, но случается.
vedenin1980
Чем детальнее сообщения ошибках вебсервиса, тем проще работа хакера. Даже выдача код ошибки это на самом деле огромная дыра в безопасности, всякие sql инъекции и переполнения стека проводятся в разы легче. Даже если хакер не знает что код ошибки реально означает, он может перебором добиваться разных кодов ошибок и определять успешность своих атак.
Это обычно не право, а обязанность — аудит безопасности вебсервиса почти гарантировано не пропустит вебсервис, выдающий детальные ошибки или стектрейсы.
Пользователю-профессионалу это все равно ничего не даст (равносильно что-то случилось, попробуйте ещё раз), а вот хакеру будет очень полезно.
vintage
Это не дыра в безопасности. Дыра в безопасности — это склеивание sql строк без экранирования, отсутствие проверок при обращении к памяти и тому подобное. А скрытие подробностей ошибки — это так, присыпание дыр листочками.
Это получится самый дешёвый и эффективный аудит безопасности, который найдёт у вас реальные дыры, а не только лишь их незамаскированность вида "стектрейс в ответе". Можно даже в теле ошибочного ответа сразу писать "Вот вам стектрейс, настройки сервера такие, сможете придумать как это эксплуатировать — получите сумму такую-то".
Пользователь-профессионал сможет догадаться, что кавычку надо заэкранировать, чтобы запрос сейчас прошёл, решив тем самым свою проблему. И сообщит в службу поддержки о возможной SQL инъекции, тем самым решив проблемы других пользователей и самого сервиса. А служба поддержки в срочном порядке сообщит ответственному программисту, что надо залатать дыру, а не закинет сотый тикет вида "изредка возникает 500 ошибка, поди разберись".
vedenin1980
Угу, даже самые большие вознаграждения за найденные уязвимости в десятки раз меньше того что предлагают на черном рынке или конкуренты. Если вас уже ломают, хакеру ваши предложения будут не интересны в 90% случаев.
Ошибки есть в любом софте, как бы он не защищался, облегчать работу хакера в серьезном сервисе даже на мизерную часть прост глупо. А открытость вовсе не означает что на безопасность не забьют.
vintage
Значит надо предлагать в 10 раз больше, чтобы хакеру было выгоднее быть белым, а не чёрным. Это же рынок.
Конечно, но мало кто будет ковыряться в носу, когда на него все смотрят. :-)
Lure_of_Chaos
Ну-ну. Пахнет сокрытием самого факта ошибки: «Ошибка? В нашем ПО? Быть не может, это нормально, а Вы там не ковыряйте ничего, чтобы не ломалось!»
Если уж так не хочется выдавать тех.инфо, то на худой конец можно шифровать, чтобы спецы потом расшифровали всю важную информацию.
vedenin1980
Да не только в сложности дело. Детальное сообщение об ошибках это огромная дыра в безопасности для хакера. Такой вебсервис не пройдет ни один серьезный аудит безопасности, поэтому кроме "Упс" они ничего не могут сказать.
alexkunin
Совершенно с вами согласен, вычистить всю приватщину из сообщения — так еще задачка. И может гугл просто не хочет вкладывать кучу времени и денег в подробные, красивые, безопасные и понятные разъяснения для того мизерного процента операций, который закончится ошибкой. Сохранили дамп у себя на сервере? Послали автоматическое сообщение инженерам? Ну и хватит.
vorphalack
кстати, там во-1х 3.1 (интересно где такой скрин автор вообще нашел?), во-2х автор оригинального текста там вообще сморозил редкостную херню — «Oh yeah, duh, ff0a8e6c shouldn’t have been pointing to HAL.DLL!», ну а в-3х, мне тоже интересно какая связь между досом и НТшкой, но судя по тому что текст написан без малого пять лет назад, мы этого уже не узнаем.
alexkunin
Не поверите, раза 3 вчера перепроверил версию на скриншоте. Пора глазам коррекцию делать…
Про хал.длл — автор стебнулся, наверное, типа офигенно полезное сообщение об ошибке — по такому-то адресу найдена такая дллка. Так себе шуточка. Но он прав в каком-то смысле — самое (единственно?) полезное для простого смертного находится в последних строчках: «перезагрузите комп; не помогло? найдите админа». Ну, и собственно код ошибки обычный человек в первых строках не распознает, так как много похожего шума на экране.
vorphalack
ну справедливости ради, до вин2к включительно, оные системы ставили либо продвинутые пользователи, либо пользоватеЛЯМ, хотя, конечно, 2/3 инфы на этом скриншоте имеют смысл только для сотрудников мс, если вообще — INACCESSIBLE_BOOT_DEVICE обычно получалось сдуру, как я помню.
alexkunin
Ну да, это ж была Windows NT Workstation (или Server — для 3.1 и 4.0 только по два эдишна было) — совсем не для домашних пользователей. Для домашних был дос и 3.1/3.11 (не-NT), 95, 98…
А INACCESSIBLE_BOOT_DEVICE частенько случался — если сменить материнку (чипсет другой), или винт в другой комп вставить, или винт на другой порт перевесить, или дрова случайно снести, или в биосе LBA-флажок какой-нибудь переставить, или линуксом разделы переделать чуть-чуть. Винда была страшно чувствительной ко всему такому.
vorphalack
еще точно был NT4 Terminal Server Edition, но это совсем зло.
ну да, собственно почти все варианты из категории «сдуру можно и буй сломать».
alex_zzzz
Тоже не угадал. Там ведь латинским по синему написано: Windows NT 3.1.
alexkunin
Боян, всего лишь одним комментарием выше по ветке.
arvitaly
Если вы знаете, что посоветовать пользователю во время неизвестной ошибки, то это вполне известная ошибка.
Известных ошибок в production быть не должно.
Технический лог пользователю ничем не поможет, а хорошим тоном может быть номер ошибки и контакт, с которыми можно обратиться в поддержку, но никак не куча абракадабры.
vintage
На момент написания кода об этой ошибке было не известно. А может было известно, но по какой-то причине не запилили (в идеальном мире, конечно, таких причин нет).
А абракадабра, зачастую, не понятна и самим программистам, так как разработчики языков программирования и библиотек зачастую не предоставляют точной и исчерпывающей информации об ошибках. Это повод делать её понятной, а не скрывать.
За примером далеко ходить не надо — GeForce Experience. Падает через пару минут после загрузки. Никаких подсказок не даёт, почему именно на моей системе она падает. На других видимо не падает, раз уже который месяц это не исправляют.
alibertino
> На момент написания кода об этой ошибке было не известно.
Именно поэтому невозможно подстелить солому, как вы хотите, т.е. рассказать что произошло, кроме как технических логов.
> А абракадабра, зачастую, не понятна и самим программистам
Причем тут создатели программы, они могут логгировать эти ошибки без показа их пользователям.
> Падает через пару минут после загрузки. Никаких подсказок не даёт, почему именно на моей системе она падает.
Не думаю, что куча чужих бектрейсов поможет 9999999 пользователей из 1000000. А последний потратит месяц или отправит багрепорт? И в GeForce (как и в большинстве программ) есть отправка логов.