История №1508824
Линус конечно же применил брутфорс и открыл бутылку, из которой немедленно вылез джинн.
— Значит так, у тебя есть три желания, — сообщил джинн. — Но нельзя желать, чтобы кто-то умер, нельзя желать, чтобы кто-то влюбился в тебя, и нельзя желать больше желаний.
— А меньше желаний желать можно? — уточнил Линус, продолжая думать про матрицу.
Джин озадачился, почесал в затылке и решил, что можно.
— Тогда я хочу чтобы количество моих желаний уменьшилось на три.
— Зачем? — поинтересовался джинн.
— Потому что я думаю, что ваши джинновые серверы записывают количество желаний в целочисленные переменные и не хранят информацию об отрицательных значениях, так что когда количество моих желаний уменьшится на три, оно станет равно нулю, после чего тебе нужно вычесть ещё единицу за то желание, которое только что исполнилось, переменная переполнится и количество моих желаний станет равно максимальному возможному значению.
— Слушай, я из 900-х годов до нашей эры, я не понимаю, — покачал головой джинн. — Меня как царь Соломон запечатал сюда, я выпал из новостной ленты совершенно.
— Ты просто сделай так, как я говорю, — посоветовал Линус.
Джинн вырвал жменьку волос из бороды, пошептал, поводил руками в воздухе, и ничего не произошло. Тогда он достал из широких шаровар записной свиток из папируса.
— У тебя теперь три желания, — прокомментировал он, сверившись с папирусом.
— O shit, — удивился Линус.
— Но вообще довольно здорово, — попытался ободрить его джинн. — Я никогда раньше не видел, чтобы человек загадал желание, и у него осталось столько же желаний. Даже если бесполезное. Хороший фокус для вечеринок.
— Двухбитная переменная, — удивился Линус. — Необычно.
— Может, дворец? — сочувственно предложил джинн. — Миллион динаров? 72 девственницы? Я могу, если что...
— Я хочу, чтобы переменная, хранящая информацию о доступных мне желаниях, стала 16-битной, определился Линус.
— Я всё ещё не понимаю, — покачал головой джин. — 900-е годы. До нашей эры.
— Это ничего, — ответил Линус, привыкший иметь дело с гуманитариями. — Ты просто сделай то что я сказал, слово в слово.
Джинн вырвал волоски из брови, пошептал, поводил руками, и снова ничего не произошло. Он снова сверился с папирусом.
— У тебя теперь два желания, — развёл руками он.
— А вот теперь я хочу, чтобы у меня стало на два желания меньше.
Джинн вырвал волоски из подмышки, поколдовал и посмотрел в папирус.
— У тебя 65 535 желаний, — озадаченно сказал он.
Линус Торвальдс нехорошо улыбнулся.
— Я же говорил, что мы живём в матрице. Присаживайся. Записывай. Значит, во-первых...
А заметили - как только итория не про еврейский пиздунец, не о "бобаизбранном народе", так сразу интересно читать?
После того как количество желаний стало равно нулю, нужно вычесть ещё единицу за то желание, которое только что исполнилось, будет -1 (исполнил желание, чтоб был 0).
В компьютерных системах числа представлены в двоичном формате и имеют фиксированный диапазон значений.
Джин использовал 16-битное беззнаковое число.
Если вычесть 1 из 0 в системе с 16-битным беззнаковым целым числом, результатом будет 65535
Попросить увеличить количество желаний нельзя, но, может быть, можно попросить подогнать трех джиннов, каждого с тремя желаниями?
Повезло, что:
- столь древняя версия ПО матрицы не оперирует понятием signed integer.
- видимо столь же древний процессор не генерирует аппаратное прерывание integer overflow.
С джиннами оно ведь как? Цитата:
"...и сказал в своём сердце: «Всякого, кто освободит меня, я обогащу навеки». Но прошло сто лет, никто меня не освободил. И прошло ещё сто лет, и я сказал: «Всякому, кто освободит меня, я открою сокровища земли». Но и на этот раз никто не освободил меня. И надо мною прошло ещё четыреста лет, и я сказал: «Всякому, кто освободит меня, я исполню три желания». Но никто не освободил меня, и тогда я разгневался сильным гневом и сказал в душе своей: «Всякого, кто освободит меня сейчас, я убью, но предложу выбрать, какой смертью умереть»... "
Интересно как бы Линус выкрутился?
И уж. если Линус, то скорее нарвался бы он на демона, нет?
Ну, это вообще просто эксплойтнуть. Цитирую Тириона Ланнистера:
"How would you like to die, Tyrion son of Tywin?"
"In my own bed, with a belly full of wine and a maiden's mouth around my cock, at the age of eighty," he replied.
Mike Mihalych➦Obake• 21.02.25 12:28
Демоны у него в подчинении. Точнее, он умеет ими управлять. ;-)
Сейчас пришла в голову такая трактовка: это даже не развод джинна на количество желаний. Линус просто проверял, не находится ли он внутри компьютерной программы. Он же перед этим думал о матрице. И удостоверился, что счётчик желаний работает по принципу кода. То есть мы имеем дело с поставленным научным экспериментом.
andreydv1 ★★★➦Michael Ashnin• 19.02.25 23:43
Принцип такой: допустим переменная 3-хбитовая. Если с десятичной системой аналогию проводить, то на трёх позициях максимальное число при трёх разрядах будет 999 (и количество комбинаций 1000 - от 0 до 999). Если из 003 отнять 3 и ещё 1, то получится -1. Так вот, если система будет из трёх позиций, то машина, отнимая от 003 четвёрку, получит не минус один, а перещёлкнется на 999. Этот прикол и использовал Линус в данной байке.
Michael Ashnin ★★★➦andreydv1• 20.02.25 07:28
Спасибо, но я безнадёжен, самому иногда смешно — какой же я чайник!
Старый и ленивый, заточенный под одну функцию…
Спасибо ещё раз — я оценил вашу благожелательность.
Kelavrik_0➦Michael Ashnin• 20.02.25 10:29
Числа записывают как степени двойки. Пусть двух битовая переменная. Первый бит А, второй В. Число воспринимается А*2+В. Но В может быть только 0 или 1. Если А=1 и В=1, то имеем число 3. Допустим добавляем 1 как при сложении в столбик. В превращается в 0, единица переходит на нижний разряд, то есть к А. А+1 тоже ноль, но другого то разряда нет и получается А=0, В+0.
Random➦Michael Ashnin• 21.02.25 03:37
Kelavrik_0, ну вот представьте, что вы анестезиолог и говорите про дыхательную функцию под опиатами.
Что будет понятнее среднестатистическому собеседнику без специальных знаний?
Вариант 1) «Опиаты повышают респираторную депрессию до летальных величин».
или
Вариант 2) «Дыхалка на герыче ваще в жопу братан, ты эта, не бухай особо».
Так вот, Миша, вот вам вариант #2 касательно данной истории. Есть ячейка. Хранит ровно одну цифру, от 0 до 9. Когда в ней ноль, и мы делаем -1, то получается 9. Было бы 9, сделали бы +1, получили бы 0. Всё.
Kelavrik_0➦Random• 21.02.25 10:55
Да тут знаний на уровне простейшей арифметики. В отличии от анестезии.
Mike Mihalych➦Michael Ashnin• 21.02.25 12:31
Представьте, что Вы скручиваете счетчик пробега на автомобиле. Старый, механический, как в "Жигулях" или "Москвичах". Если сильно перекрутить, то счетчик после 00000 покажет 99999. В байке описывается примерно такой же случай. 2 раза. ;-)
Random➦Mike Mihalych• 21.02.25 14:55
Браво! Реквестирую больше простых, понятных и правильных аналогий.
Random➦Kelavrik_0• 21.02.25 15:49
Да, это интуитивно для меня и вас, но отнюдь не для обычного человека :) Анестезия тоже в общем-то простейший ответ физиологии на уровне агонистов/антагонистов нескольких рецепторов, не сложнее разрядов имхо, а вот гляди ж ты как влияет на жизнь.
andreydv1 ★★★➦Mike Mihalych• 21.02.25 23:11
Вот это самое наглядное объяснение. И главное правильное.
Вот только тип не указал. Signed или unsigned. Кто его знает, что у них там по умолчанию декларируется...
Хренонимус ★➦Коммутатор• 20.02.25 12:21
Дык! От 16ти до 32х бит всего десяток лет прошел ;)
Random➦Хренонимус• 20.02.25 18:34
У Доктороу была прекрасная повесть на эту тему: https://craphound.com/walh/Cory_Doctorow_-_With_a_Little_Help.html
Random➦Хренонимус• 21.02.25 01:37
Epoch. Right.
На самом деле, 19 января 2038 наебнутся ооочень многие системы, от кассовых аппаратов до банкоматов (которые по слухам до сих пор на коболе, а по лично виденным примерам, от ХР до OS/2).
Хренонимус ★➦Random• 21.02.25 12:22
Вот за коболь и индустриалку - да. Невидимый ИТ он такой. Работает спокойно, никого не трогает, никто его не трогает, пока, внезапно, не работает.
И работать это будет до первого вселенского патча. А вот ЛЛео Каганов эту идею (бесконечные три желания) реализовал через методы социальных графов: https://lleo.me/arhive/fan2004/piramida.shtml
andreydv1 ★★★➦dobrovit• 20.02.25 08:40
Всякое в жизни случается. Ещё недавно куча народа слушало гречку.
Уже ниже я писал, что улыбнуло. Цитата из истории:
>ваши джинновые серверы записывают количество желаний в целочисленные переменные и не хранят информацию об отрицательных значениях
Вообще ЭВМ пофиг какое число - с минусом, или без. Если оно целое, то что -1, что 1 - это type integer. Диапазон целых чисел разный в разных ЯП, что то вроде от -32000 до 32000.
И
> переменная переполнится
- это лютый треш. Для тех кто в курсе.
Вспоминаем информатику: переменная - это зарезервированная область в оперативной памяти, в которой в которой хранятся данные какого либо типа. И ЭВМ пофигу с минусом, или без целочисленные переменные. Так то это дыра в безопасности, если программа отработает так, как написано в истории
kamakama ★➦proctoleha• 19.02.25 17:10
Ассемблерам пофиг на дыры. Сказали XOR - значит XOR. А то, что мы там не байты складываем, а числа - это его вааще не ебет.
perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
vap➦proctoleha• 19.02.25 17:16
Но на распространенных ныне архитектурах двоичное представление шестнадцатибитного беззнакового 65535 такое же, как и для шестнадцатибитного знакового -1. И, кстати, в большинстве языков ничего плохого не случается, если из беззнакового вычесть что-то, что дало бы отрицательный результат. В Си так, насколько помню, даже официально можно (в отличие от знаковых - там по стандарту будет неопределенное поведение).
Kelavrik_0➦proctoleha• 20.02.25 10:22
Уфф! Числа отрицательные и положительные складывают одинаково, это верно. Но разная интерпретация чисел.
Коммутатор➦vap• 20.02.25 10:46
Окромя включенных опций проверки современных компиляторов, которые вызовут SEH и, если он не перехвачен, оно приведет к terminate.
Анекдот - чушь, и Линуса приплели зря, он не такой дурак. Было же условие - нельзя больше желаний, поэтому все фокусы, в результате которых следующее количество больше предыдущего - невозможны.
По условию "нельзя желать больше желаний." То есть нельзя формулировать запрос вида "Wishes=Wishes++", "Wishes=Wishes+N", "Wishes=N*Wishes", где Wishes и N беззнаковые целые. А вот запрос вида "Wishes=Wishes-N" при таких же ограничениях на Wishes и N допустим: это желать МЕНЬШЕ желаний.
А то, что реализовано через задницу - так это нормально. Оно всегда так реализовано. Вон, Сухие из Питера вылететь не могли. Идиотизм? Конечно.
Анекдот не чушь, а очень реалистичная притча. Можно студентам рассказывать, например. Здесь обыгрывается реально существующая классическая компьютерная уязвимость. Очень, очень многие люди в истории именно такие условия в своей программе и поставили, и это было для них не к добру.
Я эту уязвимость году примерно в 1995 нащупал интуитивно :)
Была такая игра, Elite, векторная 3D-графика.
Стрелять по врагам нужно лазерам, судорожно совмещая прицел в трех координатах, а они обратно палят.
И были самонаводящиеся ракеты. Были они дорогие, в бей помещалось три штуки. Наводишь на цель и жмешь файр.
Не знаю каким чудом, но я навел ракету, затем задокился со станцией, продал ракету, вылетел со станции и выстрелил.
И хуяк! 255 ракет в бее.
До сих пор помню чувство абсолютного контроля над тканью бытия, испытанное в тот момент.
Kelavrik_0➦Random• 20.02.25 10:19
Одна девушка нашла эту же уязвимость в 3 героях на случайной карте. Там она оказалась изолирована и сидела ждала нужного артефакта, чтоб перелететь через горы. Ну и дождалась отрицательного числа алмазов.
Apostle➦Random• 25.03.25 01:52
О да, Элит - легенда! Помню из комнаты с братом выходили, так как нельзя было дышать, чтобы загрузилась с кассеты на Спектрум😅 А еще во вторых героях можно было на минус деньги купить минус юнита, а потом разделить его шифтом на -2 и 1 и так пока не надоест. А минусовых уволить)
Очень хорошо. С точки зрения самой идеи одна из самых смешных историй в рунете за последнее время.
Миндербиндер➦Awn• 19.02.25 16:28
Ну все сходится — Торвальдс думал, что нашёл бутылку с коньяком, а она оказалась с джином. Все остальное — пьяные галлюцинации Торвальдса, который перебрал можжевеловой водки.
Напомнило вопрос про чёрного кота:
удваивает он или отменяет дурность
предзнаменования, если дорогу вам
перейдёт, а потом вернётся назад?..
Все такие умные, про матрицу рассуждают, про переменные. Меня волнует более приземленный вопрос, про 72 девственниц! Где их содержать, в моей двухкомнатной брежневке? Значит надо и дворец, и миллион, чтоб содержать всё это. Проще сорвать джекпот в миллиард , в Столото.
Хренонимус ★➦demontag• 19.02.25 19:59
Так там стартовый пакет сразу предлагался: дворец, миллион динар и толпа девственниц ;)
Лишь бы прозекторы не стали тоже слать сюда профюмор.
Всё-таки раздел историй, а не басен.
Ну, это, конечно, в анекдотах должно было быть. А в остальном почему нет? Что, истории про вытащенную стрелу и подозрение на простатит сильно лучше?
Зачем равняться на придурка оби? Того всегда минусую. А "простатит" прям в точку лёг. Надеюсь, автор меня послушает и подстрахуется. Вдруг полное совпадение. Будет польза (афтырю) от неформата.
А к этому произведению в анекдотах не имел бы никаких претензий.
Генрих Монт ★➦MasterIvanov• 19.02.25 15:13
По данным опроса, более 90% людей убеждены, что слово «конгениально» является превосходной формой наречия «гениально». То есть если человек является даже более гениальным, чем гений, то он «конгениален». Но, к сожалению, это неправильно! Слово «конгениальный» пришло к нам из латыни и дословно обозначает «схожий по духу». Таким образом мы получаем, что «конгениально» - это близко по духу. Если вы назвали человека «конгениальным», значит, вы имели в виду то, что он схож с вами по образу мышления и ценностям.
Как только я захотел выпить, мне позвонил друг и позвал в бар: этот человек конгениален!
MasterIvanov ★★➦SV• 19.02.25 15:19
"Я ждал тебя, мой нежный критик!" Твою дружескую заботу, интерес к моему комменту и поддержание разговора.
Ваше обращение на Вы только наше состояние близости и атмосферы уважения на этом сайте! Если Вы, конечно, не людоед!
Yggaz➦Генрих Монт• 20.02.25 08:28
Нет в языке понятия "правильно/неправильно". Есть "принято". И увы, язык меняется. Мне тоже не нравится, что "нелицеприятный" используют как усиленный вариант "неприятный" (а не "беспристрастный", как было), а слово "довлеть" понимают как "оказывать давление" (а не "быть достаточным", как было). Но если 90% людей понимают "конгениальный" как "очень гениальный" - вероятно, это слово теперь принято использовать именно в этом значении. А я опасаюсь, что там уже не 90, а 97% :).
Ага, а если бы у Джина оказалась арифметика многократной точности, а не в виде двухбайтного слова типа Integer*2, то дырку от бублика он бы получил, а не переполнение массива.
AleM ★➦John Doe• 20.02.25 12:23
А я не про историю, я про арифметику многократной точности? Не приходилось с таким сталкиваться, когда нужно перемножить или сложить два десятичных числа с тысячью знаков в каждом?
А потом он сел повышать привилегии до Root, вышел за пределы защищенной памяти, и словил kernel panic. Поэтому, в нашей версии реальности эта история осталась только в виде данного лога.
kamakama ★➦2haw2• 19.02.25 17:11
А потом Линус сказал ему - просто повторяй, не думай
perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
На самом деле, требовать сделать переменную 16 битной не нужно, это лишняя работа и лишний шанс, что что-то пойдет не так.
Достаточно было загадать 2 желания, а на последнем попросить минус 1 желание и снова получить 3 желания. Повторять до бесконечности.
Random➦Пан хулиган• 19.02.25 15:34
Каганов нечто похожее реализовал, но не так прямолинейно.
https://lleo.me/arhive/fan2004/piramida.shtml
Хе хе ... А кто сказал, что там не вещественный тип данных? Матрица-то аналоговая )
2haw2 ★➦proctoleha• 19.02.25 13:24
65536, но 0 это тоже состояние. Так что всё правильно подсчитано.
Отличная идея, повеселили. Но если бы переменная была signed, а не unsigned?
karag0➦Kelavrik_0• 19.02.25 13:34
Если бы переменная, хранящая количество желаний, была знаковой, то результат зависел бы от того, как джин обрабатывает переполнение и отрицательные значения.
karag0➦Kelavrik_0• 19.02.25 13:38
Тем более джин работает с переменными напрямую, типа древний как ассемблер, и для него нет понятия signed/unsigned
2haw2 ★➦Kelavrik_0• 19.02.25 13:45
Тогда Линус бы с ок-фейсом пошёл исполнять желания джинна, разумеется!
Kelavrik_0➦karag0• 19.02.25 14:10
В шутящих физиках была история про -2 рыбы. https://www.anekdot.ru/id/271033/
Что я написал, к него нет понятий переменных он манипулирует битами на прямую
Коммутатор➦Kelavrik_0• 20.02.25 09:58
Очевидно в 900 годах до нашей эры не было понятия отрицательных чисел. Так что никаких signed. Правда и нуля тогда не было.
P.S. Могу ошибаться по эпохе, когда ввели понятие отрицательных чисел.
Коммутатор➦Коммутатор• 20.02.25 10:04
Вроде бы согласуется с Википедией:
Впервые отрицательные числа были частично узаконены в классическом китайском трактате «Математика в девяти книгах» (II в до н. э.), а затем (примерно с VII века) и в Индии,...
Коммутатор➦Kelavrik_0• 20.02.25 12:45
О чем нам и поведал автор в аватаре Линуса Торвальдса.
Идея текста - замечательная.
Исполнение подкачало.
И место для публикации - не соответствует совершенно.