Обновить

Легендарные костыли в продакшене

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели34K
Всего голосов 60: ↑57 и ↓3+72
Комментарии22

Комментарии 22

Игроки быстро нашли комбинацию.

Как они это сделали? Дизасемблировали картридж? Или методом тыка? Или его нечаянно слили для какой нибудь книги секретов?

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

Javascript больше чем на половину состоит из костылей. Как вам такоe?

// Создаем пустой массив
const y = new Array(); 
// размер 0?
y.length === 0
true
// присваиваем 100 элементу значение
y[100] = 5;
// Получилось?
y[100] === 5
true
// Смотрим размер массива
y.length
101

А почему динамический sparse массив по-вашему это костыль?

А что не так? Какой размер вы ожидали увидеть?

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

Динамического массива?

List<T> в жабашарпах динамический? А list в рутнопе? А что будет, если попытаться в любом из них записать значение по индексу, выходящему за пределы границ массива?

List в жабашарпах динамический?

Код на js, при чем тут жабашарпы? В разных языках некоторые вещи работают по разному. В огороде бузина, в JS Array, в python list.

Ты уж определись: либо ты спрашиваешь об ожиданиях, либо тебя они не волнуют, «потому что это жиес, здесь правильно вот так ожидать».

Ты уж определись: либо ты знаешь, чего ожидать от кода на выбранном языке, либо возмущайся, что в С 2 + '3' и в js 2+'3' работают по разному.

Если бы Microsoft выпустила «Windows 9», такие программы легко приняли бы её за Windows 95/98

Это не правда. Даже в Vista уже был AppCompat слой, тот самый "режим совместимости", который позволял подменять системные вызовы для выбранных программ. "Девятку" пропустили исключительно из маркетинговых соображений. "Рядом" и правда был интересный костыль, связанный с получением версии Windows, очень во многих программах использовался код вида:

 GetVersionEx(&osvi);

    bIsWindowsXPorLater = 
       ( (osvi.dwMajorVersion >= 5) && (osvi.dwMinorVersion >= 1) ))

На момент Windows XP, Server 2003 и более младших версий, он корректно их различал. Но минорная версия следующей Vista сбросилась в ноль, и очень большое количество приложений не считали ее XP-совместимой. Так что как "костыль" в AppCompat db сразу вписали большое количество "подмен", а потом (по слухам) многие благополучно там и забыли из-за чего тот софт, который где-то дампил эту инфу сбивал с толку относительно версии винды, на которой он реально работал, и на более новых релизах (до 8.1). А потом решили эту проблему манифестами приложений. https://learn.microsoft.com/ru-ru/windows/win32/api/winnt/ns-winnt-osversioninfoa

В 2014 году инженерам NASA пришлось изобретать настоящий костыль, чтобы продлить жизнь марсохода Opportunity.

Отключить сбойный сектор памяти - это не костыль.

Добавлю, что ядра операционных систем могут иметь для этого штатные средства. См. например memmap для Linux или badmemorylist для Windows, это для RAM.

A для постоянных накопителей это аж задублировано, бедблоки на уровне файловых систем, и подмена сбойных секторов на резервные внутри самих HDD/SSD на уровне их прошивки.

О, а может быть вы ещё знаете как заблэклистить VRAM?
А то сломалась одна банка, и её не могут починить...)

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

Например, для 3000 серии от Nvidia такие прошивки ("биосы от Теодора") смогли сделать, благодаря утечке исходников.

Насчет других карт в паблике ничего нет, обращайтесь к ремонтникам.

Недавно работал в крупной компании, мне заявляли, что все работает, там же есть инструкция, но ни одна инструкция не работала. Сижу читают очередную инструкции, в которой написано красным "все что ниже описано не работает, новая инструкция на видео" и ссылка на видео, дальше в скобках (инструкция, как открыть видео). Тут у меня начался истерический смех.

Мне нравится этот "костыль", из-за ошибок людей:

В 1988 году в GUI X11R2 добавили три новых цвета, в том числе два одинаковых оттенка серого, которые, однако, записывались по-разному, как “gray" и “grey”. Во время обсуждения цветов на конференции JavaScript в прошлом году, разработчик Алекс Секстон рассказал, что программисты компании Hewlett-Packard не могли запомнить правильное написание «серый» через «а» (Gray), поэтому дублирующий вариант (Grey) был добавлен, чтобы избежать ошибок в коде.

правильно и так и так, это просто различие между en_US и en_GB. что ради одной конторы на такое пошли, конечно, странно

Отличия проявляются в форматировании дат, времени и чисел, а также в орфографии, пунктуации, грамматике, словарном запасе (лексике), идиомах...

Появлялись патчи, форки вроде PyPy или GIL-less Python, но официальный интерпретатор оставался однопоточным.

GIL вроде бы в PyPy тоже есть:

https://doc.pypy.org/en/latest/faq.html#does-pypy-have-a-gil-why

Yes, PyPy has a GIL. Removing the GIL is very hard. On top of CPython, you have two problems: (1) GC, in this case reference counting; (2) the whole Python language.

Microsoft ... тратила ресурсы на то, чтобы старый софт жил дальше. 

Верните меня обратно!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
ruvds.com
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия
Представитель
ruvds