мы продолжаем развивать нашу текстовую бродилку в телеграм. В этом обновлении мы взяли курс на рефакторинг и описание предыстории нашего главного героя.
* в группе я чаще всего на связи, потому с вопросами и предложениями, если нужен шустрый ответ, лучше - туда
А теперь - что же у нас изменилось? Много чего :
увеличено количество комнат 82 -> 85
переработана игровая механика в части комнат
улучшена визуальная составляющая для некоторых комнат
исправлены недочеты и множественные ошибки
улучшены существующие комнаты и их логика/награды
добавили комнату с банком, где можно будет подзаработать, ну или прогореть. Кто этих банкиров разберет :)
перевели все боевые комнаты на новую логику, теперь у нас есть однотипные и понятные логи боя со всеми монстрами
ввели новый класс
у нас начался новогодний ивент ! Игроки уже соревнуются за крутые призы!
боссы тоже стали частью новой логики
появились комнаты, прохождение которых, раскроет секреты - почему игрок оказался в бункерах и кем он был до всего этого!
добавили комнату где игроки могут отметить из какого города они играют, а после лицезреть свою метку на карте - на сайте проекта. В будущем будут квесты по локациям(Москва, Новосибирск, Питер ... . )
Немного по технической части:
провели глобальный рефакторинг кода, сократили и упростили кодовую базу, сохранив функциональность
обработали и исправили сетевые ошибки, мешающие игрокам
нас уже более 3900+ человек
В ближайшем будущем нас ждут: новые монстры для newbie & high-level игроков, новые профессии, новые сеты, новая локация с надоедливыми мобами(🏞), новые квесты и многое другое
Приветствую всех! Знаю: тема багов, которые изменили мир, избита уже настолько, что на ней не осталось живого места. Но сейчас мы не будем просто говорить о самых выдающихся таких случаях. Сейчас мы затронем лишь один из них: ту самую ошибку в процессоре Pentium. И не просто поговорим обо всём этом, а ещё и продемонстрируем её на реальной машине.
Итак, сегодня мы разберёмся, что же это был за баг в данном теперь уже ретро-процессоре. Узнаем, как он проявлялся, как его воспроизвести и, конечно же, увидим вживую, как всё это работало.
❯ Суть такова
Думаю, все вы не раз (думаю, даже тут) читали посты про самые сокрушительные ошибки в истории ЭВМ. Одной из них неизменно значится предмет нашей сегодняшней статьи: Intel Pentium и его ошибка деления. Суть её была довольно проста: на некоторых комбинациях чисел с плавающей запятой сопроцессор «пенька» при делении выдавал неверное значение. Этих самых комбинаций было не так уж и много, поэтому обнаружили проблему не сразу, однако после выяснения обстоятельств стало ясно, что пренебрегать дефектом нельзя.
Концом истории случился массовый отзыв дефектных чипов и многомиллионные убытки на их бесплатную замену. Работники Intel в назидание получили вот такой сувенир, где под слоем эпоксидки покоился кристалл того самого процессора. Хотя этот просчёт сам по себе никого не убил и ничего не уничтожил, удар по репутации был сокрушительным (хотя, конечно, и не фатальным).
И вот, прочитав не так давно об этом в очередной раз, я захотел показать самое интересное: то, как данная проблема вообще проявлялась и насколько реально было простому пользователю с ней столкнуться.
По традиции вставлю неизменную для таких статей картинку с тем самым процессором.
Это Intel Pentium A80501-66, некоторые спецификации (S-spec) которого имели эту ошибку. Конкретно на фото представлен SX837, у которого данный нюанс присутствует.
Далеко не все «пеньки» имеют данный дефект. Более того, даже у вышеупомянутой модели у некоторых экземпляров (например, SX950) данный баг отсутствует.
❯ Чуть-чуть про деление в Pentium
Вообще, данная тема также хорошо описана, а описание того, как устроено и как работает деление в микропроцессорах, и вовсе потянет на ещё одну статью, с пеньками никак не связанную.
Но кое-что всё-таки стоит упомянуть. Причиной данного глюка являлся переход на более быстрый алгоритм деления (SRT, названный по именам создателей — Sweeney, Robertson, Tocher) вместо shift-substract, использовавшегося в более старых сопроцессорах. Алгоритм этот использует в своей работе таблицу поиска на основе делимого и делителя. В Pentium использовалась реализация SRT-4 (Radix 4), где ячейки таблицы могли принимать одно из пяти значений: -2, -1, 0, +1 и +2. Это должно было значительно упростить вычисления, так как такое решение позволяет выбирать частное, ориентируясь только на старшие биты делимого и делителя, а скорректировать результат уже потом. Также данный алгоритм позволял обрабатывать несколько бит за один такт, что также повышало скорость. Именно в этой таблице поиска и была проблема: некоторые её ячейки были пусты.
Сама таблица была реализована в виде программируемой логической матрицы.
Такое решение было сделано из-за куда большей простоты по сравнению с ПЗУ. Поэтому под пустыми ячейками тут понимаются не оставшиеся незаписанными участки памяти, а ошибочно не предусмотренные в нужных местах транзисторы. На самом деле число таких битых участков в таблице было вовсе не 5, как говорят в большинстве источников, а 16, однако 11 из них не вызывали неверный результат. Это и была та самая аппаратная ошибка, приводившая к сбоям. Была ли причиной опечатка в программе, генерировавшей данную таблицу, или математическая ошибка разработчиков Intel, теперь уже неведомо.
Как оказалось, существует очень крутая серия постов, описывающая то, как реализована данная матрица в Pentium и где именно в ней кроются дефекты. Поэтому не буду повторяться в описаниях, как вообще это устроено, лучше сразу ознакомиться с оригиналом по ссылке.
Ну а мы переходим к опытам.
❯ Обзор оборудования
Чтобы воспроизвести данный баг, необходим компьютер и два процессора Pentium — обычный и дефектный.
За основу для ПК возьмём материнку A-Trend ATC-1000 на чипсете i430FX «Triton», как раз одном из первых чипсетов для процессоров Pentium. Само собой, поддержка нужных нам процессоров здесь тоже в наличии. Ещё круче было бы взять плату с Socket 4 или 5, но у меня такой пока нет.
PCI видеокарта SiS 6202, первая из попавшихся под руку карт.
Самый важный элемент машины — пенёк.
Это Pentium A80502-100 на 100 МГц. Позолоченный, керамический, приятно тяжёлый. Круче него из x86-процессоров, наверное, только Pentium Pro. Достался мне этот камень ещё лет десять назад, будучи вытащенным из процессорной платы от некоего брендового сервера на платформе Intel Xpress Server LX, кажется, HP NetServer LM. Сама плата (а, может, и материнка) оказалась в нерабочем состоянии, оживить её я в своё время не смог и в итоге продал весь этот комплект какому-то другому любителю ретроПК.
Смотрим, что там по характеристикам. FDIV bug, как и положено, в наличии.
Второй процессор, на этот раз намного более поздний и данной ошибки в себе не содержащий.
На всякий случай напомню, что у Pentium разных поколений разное напряжение питания, поэтому, перетыкая процессоры без перестановки перемычек на материнской плате, вы рискуете поджарить свой камень.
Также, само собой, понадобится и другая периферия: клавиатура с мышью, жёсткий диск (на который я уже успел накатить Windows 98), две планки памяти по 16 МБ, AT блок питания.
❯ Запускаем
Ну что же, собираем тестовый стенд и включаем БП.
А вот и наша Windows 98.
Также видны наши характеристики — 32 мегабайта ОЗУ и тот самый процессор Pentium. В данный момент тут вставлен самый обычный пень, данного недостатка лишённый.
❯ Как же это работает?
Перейдём непосредственно к проверке.
Открываем стандартный калькулятор Windows. Да-да, даже в этом простом приложении можно без труда воспроизвести данный глюк.
Теперь переключаем его в инженерный режим и вводим туда следующее выражение:
(4195835 / 3145727) * 3145727 — 4195835
Объяснить код с
На нормальном процессоре результатом его выполнения должен быть ноль.
Его-то мы и наблюдаем.
Выключаем компьютер. Время устанавливать золотой пень.
Загружаемся и снова пробуем вычислить данное выражение.
На этот раз мы получаем неверный ответ -256. Это и есть влияние данного бага.
Чуть менее наглядно его можно воспроизвести, если просто поделить между собой эти два числа и получить неверный ответ.
❯ Что же в итоге?
На самом деле далеко не все числа делились неправильно. Здесь представлена только одна из довольно немногочисленных пар, которые при делении давали неверный результат. Поэтому во многих задачах вероятность встретить его была довольно невелика. Впрочем, в этом-то и заключалась подлость такой ошибки, поскольку обнаружить такой «плавающий» дефект может быть очень непросто.
Итоги мы все хорошо знаем — Intel была вынуждена сдаться, а все, кому была важна точность вычислений, получили возможность бесплатно заменить дефектные процессоры. Сейчас экземпляр с таким багом представляет неплохую коллекционную ценность. Такие дела.
Помните, как вы просили добавить напоминания об уколах и измерениях? Готово!
Какие напоминания? Вроде и так вовремя кормят...
Для тех, кто не в курсе что тут происходит
Это продолжение серии постов про Diabnostic — бесплатное приложение для владельцев питомцев с диабетом. Веду дневник глюкозы, инсулина, веса; строю графики; теперь ещё и напоминания.
Началось с моей кошки Манишки — 13 лет, диабет, два укола в день. Захотел нормальный инструмент вместо экселя, сделал, выложил для всех. Предыдущие посты можно найти у меня в профиле.
Что нового
Теперь Diabnostic умеет присылать push-уведомления прямо в браузер — даже когда приложение закрыто.
Можно настроить напоминания для каждого питомца отдельно:
Глюкоза — не забыть измерить сахар
Инсулин — время укола
Вес — контрольное взвешивание
Давление — для тех, кому актуально
Своё напоминание — что угодно, хоть "дать вкусняшку"
Выбираете время, отмечаете нужные дни недели — и всё. Приложение само напомнит.
Примерно так и будут выглядеть напоминания. Спама от них не будет - только то, что вы настроите сами.
Как это работает
При первом открытии настроек напоминаний в профиле питомца браузер спросит разрешение на уведомления. Соглашаетесь — и готово. Есть кнопка "Тестовое уведомление", чтобы проверить, что всё дошло.
Напоминания приходят по вашему местному времени. Живёте в Новосибирске и поставили напоминание на 8:00 — оно придёт в 8:00 по Новосибирску.
Зачем это нужно
Когда у питомца диабет, жизнь превращается в расписание: укол в 8, укол в 20, измерение перед едой, измерение через два часа... Первые недели держишь всё в голове, потом неизбежно что-то забываешь. Особенно если сам болеешь или просто устал.
Моя Манишка на инсулине уже 2 месяца. Бывало — заработаюсь и спохвачусь: "А я покормил или нет?" Теперь телефон пикает, и вопросов не возникает.
Кстати, можно теперь заметки добавлять и в записи глюкозы/веса
1/2
Добавление напоминаний с главного экрана и редактирование записей
Если интересно немного статистики за месяц — о ней я писал в предыдущем посте. Там правда можно позалипать =)
Пойду спать к подружке. Для этого напоминаний не нужно
P.S. Пикабу решил, что я слишком коммерческий, так что теперь плачу за возможность рассказывать про котиков. Пришлось пойти на их условия.
Просьба та же: если пользуетесь и что-то неудобно — напишите.
Наконец-то дошел до этого этапа, теперь моя игра доступна в магазине Steam. Добавляйте в список желаемого! Выживай в хаосе bullet-heaven экшена: дави орды врагов, собирай безумные билды и переживай катаклизмы, которые меняют правила прямо по ходу боя.
Но туда же можно подсунуть что угодно, что будет выполнено на компе. Это реально капча или шляпа какая то? Какой сумрачный гений такое придумал? Ладно светофоры или мотоциклы искать, писать всякую ересь, крутить котиков, но в командную строку пихать всякое разное это как то перебор.
Качественные изображения в стиме — это не только украшение, но и рабочий инструмент для привлечения аудитории.
Если теги (как мы обсуждали ранее) помогают автору найти своего игрока, то графика убеждает его остановиться, рассмотреть вашу страницу и купить игру.
В этой шпаргалке — собраны обязательные требования и практические рекомендации при подготовке капсулы в Steam.
Капсула (Верхняя)
Где используется: верх страницы игры, рекомендации, Big Picture и предложения дня. Ключевые требования: высококачественный арт, показывающий особенность игры. Ограничения: нельзя использовать лишний текст, рейтинги, акционные надписи. Размер (в пикселях): 920x430
Капсула (маленькая)
Где используется: результаты поиска, списки лидеров продаж или списки популярных новинок. Ключевые требования: максимально читаемый логотип, заполняющий большую часть площади. Ограничения: нет, но лучше избегать маленьких лолго и незаметного текста. Размер (в пикселях): 462x174
Капсула (основная)
Где используется: главная карусель на домашней странице Steam (популярное и рекомендуемое). Ключевые требования: требования такие же, как и к верхней капсуле. Ограничения: нельзя указывать никакой дополнительной информации, только название игры. Размер (в пикселях): 1232x706
Капсула (вертикальная)
Где используется: главная страница во время сезонных распродаж. Ниже популярного и рекомендуемого. Ключевые требования: в идеале использовать вертикальную версия основного арта. Ограничения: логотип не должен сливаться с фоном, лучше избегать лишнего текста. Размер (в пикселях): 748x896
Скриншоты
Где используется: на страничке игры под трейлером. В разделе новинок показывают первые четыре скриншота. Ключевые требования: важно показать геймплей, уникальные механики и интерфейс. Высокое качество. Ограничения: лучше не делать скрины из видео, а также не использовать концепт-арты. Размер (в пикселях): 1920x1080
Фон страницы
Где используется: на страничке игры под трейлером. В разделе новинок показывают первые четыре скриншота. Ключевые требования: фоновое изображение. Если его не загрузить — фон сгенерируют из последнего скриншота. Ограничения: нет, но лучше использовать неброское изображение, которое не будет отвлекать игрока. Размер (в пикселях): 1438x810
Изображение для набора
Где используется: для страницы набора (DLC, бандла, подарочного издания). Ключевые требования: должна соответствовать фирменному стилю. Подойдёт арт для розничной упаковки. Ограничения: нет, но лучше использовать качественное изображение. Размер (в пикселях): 707x232