[Коллеги, поплачте] Как рождается идиотизм
От: · Великобритания  
Дата: 10.05.19 11:35
Оценка: :))) :))
https://news.ycombinator.com/item?id=19493440

Вкратце — Firefox сделал сообщение "X is undefined" в JavaScript exception более информативным и это сломало какой-то популярный сайт, т.к. создатели сайта скопипастили какой-то демо код. Изменение откатили.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: [Коллеги, поплачте] Как рождается идиотизм
От: vsb Казахстан  
Дата: 10.05.19 11:56
Оценка:
Здравствуйте, ·, Вы писали:

·>https://news.ycombinator.com/item?id=19493440


·>Вкратце — Firefox сделал сообщение "X is undefined" в JavaScript exception более информативным и это сломало какой-то популярный сайт, т.к. создатели сайта скопипастили какой-то демо код. Изменение откатили.


Потому что нет нормальной архитектуры. Я тоже SQLException парсю в одном месте тк мне нужна инфа а в полях её нет.
Re: [Коллеги, поплачте] Как рождается идиотизм
От: Pzz Россия https://github.com/alexpevzner
Дата: 10.05.19 12:01
Оценка:
Здравствуйте, ·, Вы писали:

·>Вкратце — Firefox сделал сообщение "X is undefined" в JavaScript exception более информативным и это сломало какой-то популярный сайт, т.к. создатели сайта скопипастили какой-то демо код. Изменение откатили.


Уж сколько лет на свете существует компьютерная наука, а нормальный подход к обработке ошибок так и не придумали...
Re[2]: [Коллеги, поплачте] Как рождается идиотизм
От: · Великобритания  
Дата: 10.05.19 12:14
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>·>Вкратце — Firefox сделал сообщение "X is undefined" в JavaScript exception более информативным и это сломало какой-то популярный сайт, т.к. создатели сайта скопипастили какой-то демо код. Изменение откатили.

vsb>Потому что нет нормальной архитектуры. Я тоже SQLException парсю в одном месте тк мне нужна инфа а в полях её нет.
Конкретно в данном случае есть Error и у него поле name. У тебя — тоже что-то не очень верю, что это так необходимо, скорее всего просто workaround для какого-нибудь legacy.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: [Коллеги, поплачте] Как рождается идиотизм
От: Hobbes Россия  
Дата: 10.05.19 12:24
Оценка:
Здравствуйте, ·, Вы писали:

·>это сломало какой-то популярный сайт, т.к. создатели сайта скопипастили какой-то демо код


Это сломало какой-то популярный индийский сайт, т. к. создатели сайта парсили текст в исключении.
Re[2]: [Коллеги, поплачте] Как рождается идиотизм
От: · Великобритания  
Дата: 10.05.19 14:04
Оценка: 3 (1)
Здравствуйте, Hobbes, Вы писали:

H>·>это сломало какой-то популярный сайт, т.к. создатели сайта скопипастили какой-то демо код

H>Это сломало какой-то популярный индийский сайт, т. к. создатели сайта парсили текст в исключении.
Ты плохо разобрался. Не они парсили, а взяли либу, в которой был демо код. Но кто ж читает доки...
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: [Коллеги, поплачте] Как рождается идиотизм
От: vsb Казахстан  
Дата: 10.05.19 14:18
Оценка:
Здравствуйте, ·, Вы писали:

vsb>>·>Вкратце — Firefox сделал сообщение "X is undefined" в JavaScript exception более информативным и это сломало какой-то популярный сайт, т.к. создатели сайта скопипастили какой-то демо код. Изменение откатили.

vsb>>Потому что нет нормальной архитектуры. Я тоже SQLException парсю в одном месте тк мне нужна инфа а в полях её нет.
·>Конкретно в данном случае есть Error и у него поле name.

В котором лежит ReferenceError, а не X.

> У тебя — тоже что-то не очень верю, что это так необходимо, скорее всего просто workaround для какого-нибудь legacy.


Не веришь — не надо. Из хранимки оракла возвращается user error, который в Java передаётся как SQLException. Мне нужно вытащить определенное значение из сообщения об этом user error.
Re[4]: [Коллеги, поплачте] Как рождается идиотизм
От: · Великобритания  
Дата: 10.05.19 14:43
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>>>Потому что нет нормальной архитектуры. Я тоже SQLException парсю в одном месте тк мне нужна инфа а в полях её нет.

vsb>·>Конкретно в данном случае есть Error и у него поле name.
vsb>В котором лежит ReferenceError, а не X.
Ээээ. И? Там же просто факт undefined проверялся.

>> У тебя — тоже что-то не очень верю, что это так необходимо, скорее всего просто workaround для какого-нибудь legacy.

vsb>Не веришь — не надо. Из хранимки оракла возвращается user error, который в Java передаётся как SQLException. Мне нужно вытащить определенное значение из сообщения об этом user error.
Быстро погуглил:

raise_application_error(error_number, message[, {TRUE | FALSE}]);

where error_number is a negative integer in the range -20000 .. -20999

"Error Code: " + ((SQLException)e).getErrorCode()


оно?

Хотя если надо передать помимо факта определённой user error ещё что-то, что не укладывается в error_number, то проще всего, похоже, запихать это в message. Но звучит как хак, а не продуманная архитектура.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: [Коллеги, поплачте] Как рождается идиотизм
От: vsb Казахстан  
Дата: 10.05.19 15:05
Оценка:
Здравствуйте, ·, Вы писали:

·>Здравствуйте, vsb, Вы писали:


vsb>>>>Потому что нет нормальной архитектуры. Я тоже SQLException парсю в одном месте тк мне нужна инфа а в полях её нет.

vsb>>·>Конкретно в данном случае есть Error и у него поле name.
vsb>>В котором лежит ReferenceError, а не X.
·>Ээээ. И? Там же просто факт undefined проверялся.

>>> У тебя — тоже что-то не очень верю, что это так необходимо, скорее всего просто workaround для какого-нибудь legacy.

vsb>>Не веришь — не надо. Из хранимки оракла возвращается user error, который в Java передаётся как SQLException. Мне нужно вытащить определенное значение из сообщения об этом user error.
·>Быстро погуглил:
·>

raise_application_error(error_number, message[, {TRUE | FALSE}]);

·>where error_number is a negative integer in the range -20000 .. -20999

·>

·>"Error Code: " + ((SQLException)e).getErrorCode()


·>оно?


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

·>Хотя если надо передать помимо факта определённой user error ещё что-то, что не укладывается в error_number, то проще всего, похоже, запихать это в message. Но звучит как хак, а не продуманная архитектура.


Кто-ж спорит. Задачу делать надо.
Отредактировано 10.05.2019 15:07 vsb . Предыдущая версия . Еще …
Отредактировано 10.05.2019 15:06 vsb . Предыдущая версия .
Re[2]: [Коллеги, поплачте] Как рождается идиотизм
От: · Великобритания  
Дата: 10.05.19 16:14
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>·>Вкратце — Firefox сделал сообщение "X is undefined" в JavaScript exception более информативным и это сломало какой-то популярный сайт, т.к. создатели сайта скопипастили какой-то демо код. Изменение откатили.

Pzz>Уж сколько лет на свете существует компьютерная наука, а нормальный подход к обработке ошибок так и не придумали...
В данном случае наука тут непричём. Тут больше что-то между "Добрые намерения ведут в ад" (for the purpose of illustrating expected behavior) и "думать некогда, прыгать надо" (херак-херак и в прод).
ИЧСХ — тут
Автор: vsb
Дата: 10.05.19
опять то же самое: "Задачу делать надо".
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: [Коллеги, поплачте] Как рождается идиотизм
От: sambl74 Россия  
Дата: 10.05.19 16:55
Оценка:
Здравствуйте, ·, Вы писали:

·>Вкратце — Firefox сделал сообщение "X is undefined" в JavaScript exception более информативным и это сломало какой-то популярный сайт, т.к. создатели сайта скопипастили какой-то демо код. Изменение откатили.


Было у меня похожее Когда-то, когда Flash ещё только начали закапывать, у нас в продукте внезапно вместо загрузки флешёвого модуля стала показываться надпись, что флеша нет, идите качайте. Как потом оказалось, в дебажной версии флеш плейера слово "Debug" поменяло свою диспозицию в строке версии продукта, и код, который проверял версию, внезапно получил нечто вместо числа. Ну и естественно, что этот код был когда-то самим адобом и написан В принципе, вылезло это только у разработчиков, так как мы держали дебажную версию флеш плейера на своих компах для разработки, а конечные пользователи ничего и не заметили.
Re[3]: [Коллеги, поплачте] Как рождается идиотизм
От: Pzz Россия https://github.com/alexpevzner
Дата: 10.05.19 20:40
Оценка:
Здравствуйте, ·, Вы писали:

·>В данном случае наука тут непричём. Тут больше что-то между "Добрые намерения ведут в ад" (for the purpose of illustrating expected behavior) и "думать некогда, прыгать надо" (херак-херак и в прод).

·>ИЧСХ — тут
Автор: vsb
Дата: 10.05.19
опять то же самое: "Задачу делать надо".


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

В языках, в которых ошибка — это код или некая структура ситуация не сильно легче, потому что когда ошибка прилетает откуда-то из глубин наверх, там, наверху, уже не очень понимают, что с этой ошибкой делать. Потому что не может какой-то один слой программы знать про все ошибки, которые могут снизу прилететь.
Re[3]: [Коллеги, поплачте] Как рождается идиотизм
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 12.05.19 07:14
Оценка:
Здравствуйте, ·, Вы писали:

·>Конкретно в данном случае есть Error и у него поле name. У тебя — тоже что-то не очень верю, что это так необходимо, скорее всего просто workaround для какого-нибудь legacy.


В огороде бузина. Какое это имеет отношение к SqlException?

Все зависит от провайдера. Иногда просто нет АПИ, чтобы получить сведения о состоянии объекта. А в исключении есть.

Предлагаешь становиться в позу святоши или начитать писать свой провайдер?
Отредактировано 12.05.2019 7:23 Pauel . Предыдущая версия .
Re[4]: [Коллеги, поплачте] Как рождается идиотизм
От: · Великобритания  
Дата: 12.05.19 09:00
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>·>Конкретно в данном случае есть Error и у него поле name. У тебя — тоже что-то не очень верю, что это так необходимо, скорее всего просто workaround для какого-нибудь legacy.

I>В огороде бузина. Какое это имеет отношение к SqlException?
Кто здесь?

I>Все зависит от провайдера. Иногда просто нет АПИ,

Ну т.е. "workaround для какого-нибудь legacy".

I>чтобы получить сведения о состоянии объекта. А в исключении есть.

I>Предлагаешь становиться в позу святоши или начитать писать свой провайдер?
Нет, предлагаю не использовать исключения для передачи состояний объекта и базировать на них логику. Вроде exception as control flow известный антипаттерн.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: [Коллеги, поплачте] Как рождается идиотизм
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 13.05.19 07:46
Оценка: +1
Здравствуйте, ·, Вы писали:

I>>Все зависит от провайдера. Иногда просто нет АПИ,

·>Ну т.е. "workaround для какого-нибудь legacy".

Это просто workaraund, АПИ появится года через два, может быть, если вендор соизволит пересмотреть консистентность АПИ или ему самому понадобится вот такая механика.

I>>чтобы получить сведения о состоянии объекта. А в исключении есть.

I>>Предлагаешь становиться в позу святоши или начитать писать свой провайдер?
·>Нет, предлагаю не использовать исключения для передачи состояний объекта и базировать на них логику. Вроде exception as control flow известный антипаттерн.

Ну то есть ты выбрал вариант "стать в позу святоши". Смотри, как классно выходит:

Уважаемый Заказчик!

К сожалению, должен уведомить Вас, что фича Х нереализуема. Пакет Y, который лежит в основе нашей архитектуры, написаный сторонним вендором, имеет жесткое ограничение.
В силу этого ограничения, единственный воможный вариант реализации фичи это exception as control flow, что есть известный антипаттерн.
Такой блудняк мы себе позволить не можем, поскольку на форуме RSDN.ru о нас подумают плохо.

С Уважением, всегда Ваш Величайший Разработчик Всех Времён и Народов


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

Я в своё время для одной из либ писал маппер ошибок, вида:
в сообщении нет матюгов или есть вещи вида undefined, null reference, статус 500, а callstack есть `checkXXX` то это общая ошибка валидации
в сообщении есть слова fault, error, unable, а статус 500, это 401 Unauthorized
контент респонса пустой или содержит html, статус или 4хх, или 5хх, это 503 Service Unavailable
сообщение не подходит ни под один паттерн, статус или 4хх, или 5хх, это 500 Internal Service Error

В конечном итоге вся эта затея зашла в тупик, потому что на все ошибки сервис стал выдавать "500 Internal Service Error".
Re[6]: [Коллеги, поплачте] Как рождается идиотизм
От: · Великобритания  
Дата: 13.05.19 10:40
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>...поскольку на форуме RSDN.ru о нас подумают плохо.

Не поэтому, а потому что:

I>В конечном итоге

Ага. ВНЕЗАПНО!

I>вся эта затея зашла в тупик,

ЧТД.

Конечно, если от вас заказчик не ждёт надёжного решения, а "абы как заработало и чтобы вчера", то сойдёт.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Отредактировано 13.05.2019 10:41 · . Предыдущая версия .
Re[7]: [Коллеги, поплачте] Как рождается идиотизм
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 13.05.19 11:00
Оценка:
Здравствуйте, ·, Вы писали:

I>>...поскольку на форуме RSDN.ru о нас подумают плохо.

·>Не поэтому, а потому что:

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

I>>В конечном итоге

·>Ага. ВНЕЗАПНО!

Заметь, твоё предложение — встать в позу святоши.

I>>вся эта затея зашла в тупик,

·>ЧТД.

Это же не сразу, а за несколько лет. Что характерно, от тебя никаких предложений, как решить проблему на эти несколько лет, не поступило

·>Конечно, если от вас заказчик не ждёт надёжного решения, а "абы как заработало и чтобы вчера", то сойдёт.


Если фича нужна сейчас, то ждать несколько лет это не вариант.
Re: [Коллеги, поплачте] Как рождается идиотизм
От: B0FEE664  
Дата: 13.05.19 11:59
Оценка:
Здравствуйте, ·, Вы писали:

·>https://news.ycombinator.com/item?id=19493440


·>Вкратце — Firefox сделал сообщение "X is undefined" в JavaScript exception более информативным и это сломало какой-то популярный сайт, т.к. создатели сайта скопипастили какой-то демо код. Изменение откатили.


Для библиотечного кода это обычное дело: ошибки не ведущие к падению нельзя фиксить, а следует менять поведение с помощью специальных настроек.
И каждый день — без права на ошибку...
Re[2]: [Коллеги, поплачте] Как рождается идиотизм
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 13.05.19 12:07
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>·>https://news.ycombinator.com/item?id=19493440


BFE>·>Вкратце — Firefox сделал сообщение "X is undefined" в JavaScript exception более информативным и это сломало какой-то популярный сайт, т.к. создатели сайта скопипастили какой-то демо код. Изменение откатили.


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


Это какое то странное правило — зачем тебе, условно, неправильный синус ? Проще вводить ломающие изменению и отражать это через semver.
Re[3]: [Коллеги, поплачте] Как рождается идиотизм
От: B0FEE664  
Дата: 13.05.19 12:23
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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

I>Это какое то странное правило — зачем тебе, условно, неправильный синус ?

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

I>Проще вводить ломающие изменению и отражать это через semver.

Конечно проще, если пользователей не жалко или если они вам не важны.
И каждый день — без права на ошибку...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.