RunnerDeath

RunnerDeath

Пикабушник
Дата рождения: 27 февраля
353 рейтинг 3 подписчика 37 подписок 8 постов 0 в горячем
Награды:
10 лет на Пикабу
7

Семь раз протестируй, один раз обновись

EVE online и как апгрейд графона сломал windows

Обновления в играх могут принести радость от нового и неизведанного,новые миссии, героев, улучшенную графику, исправление ошибок. А с другой стороны те же самые обновления могут испортить ваш компьютер, стереть фотографии вашего любимого кота или даже повредить ОС, сделав ПК неработоспособным.

Ниже я хочу рассказать о двух примерах того, как обновления игры и игрового ПО привели к серьезным проблемам у пользователей. И начну я с графического обновления для игры EVE Online.

Словарик терминов:

CPP - команда разработчиков известной игры EVE Online

EVE Online -  массовая многопользовательская онлайн-игра с научно-фантастическим сюжетом, действие которой разворачивается в космосе

Singularity -  Публичный тестовый сервер игры EVE Online, используемый как разработчиками, так и игроками для тестирования нововведений перед их релизом на основном сервере.

Tranquility - Основной кластер серверов, на котором играют все пользователи( за исключением Китая)

Trinity - обновление игры от 5 декабря 2007 года

Хронология событий

2 декабря, Воскресенье: первое проблемное обновление выпущено на тестовом сервере Singularity. Каких либо проблем во время его работы на тестовом сервере не обнаружено

5 декабря,  22:04, Среда: Обновление установлено на сервер Tranquility, после успешной обкатки. Сразу после обновления разработчики стали получать репорты, что последний апдейт игры  приводит к проблемам - на ПК пользователей удаляется файл C:\boot.ini, без которого не запускается Windows.

6 декабря, 3:40: Проблемное обновление  убрано с сервера Tranquility через пару часов, после обнаружения проблемы

6 декабря 3:40-6:08 Разработчиков вызвали ночью для поиска и исправления неисправности.

Всю ночь программисты усердно разбираются в ситуации и ищут корень всех зол.

6 декабря, 6:08:  Проблема обнаружена и исправлена ранним утром после релиза. Вскоре после этого выпущен хот-фикс на боевой сервер

Что случилось?

Итак, разберемся, как такое могло произойти. За несколько недель до выпуска обновления Trinity у разработчиков возникло две проблемы:

- как быстро доставить контент до игроков в короткий промежуток времени

- как это сделать для игроков с низкой скоростью интернета.

Большая часть усилий была направлена на то, чтобы сделать апгрейд графики настолько маленьким по объему, насколько это возможно.

Изначально планировалось использовать стороннюю библиотеку, чтобы создать файл с обновлением. Во время разработки выяснилось, что данная библиотека хорошо подходит для обновлений файлов, которые уже есть на компьютере пользователя, но практически не сжимает новые файлы, которые отсутствуют у игроков.

Обновление графики состояло из следующих файлов:

  • 2 небольших текстовых файла boot.ini manifest.dat, которые уже были у игроков

  • и нового файла - resDX9*.stuff - объемом 1.43 GB.

Соответственно, старая библиотека не очень подходила - основной объем обновления приходился на новый файл.

Разработчики решили перейти на новый сторонний установщик, обладающий превосходным сжатием с помощью алгоритма LZMA( алгоритм сжатия данных, разрабатываемый с 1996 или 1998 года Игорем Павловым. Используется в архиваторе 7-Zip того же автора для создания сжатых архивов в формате 7z).

Благодаря такому решению загрузочный файл удалось уменьшить с 866 Mb до 584 Mb.

Разбор полетов и анализ проблемы

Из логов установщика может показаться, что допущена очевидная ошибка, когда в команде удаления указан путь до файла: “\boot.ini” вместо “boot.ini”.

Первый способ сотрет файл из корневой директории

Второй способ -  из текущей директории

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

Первый способ удалит файл из текущей директории,  а вот если использовать вначале ‘\’, то удаление происходит из корневой папки диска. Но это не совсем так. Ошибка заключалась в предположении, что файл будет удален из текущего рабочего каталога без указания полного пути.

Предполагалось, что команда SetOutPath “$INSTDIR” сменит деркторию на папку с игрой и все последующие команды будут выполняться для этой папки.

Команды File(видимо команды для записи) используют заданный путь к папке, установленный изначально и отрабатывают без ошибок.

В документации для функции “Удалить” говориться, что для удаления следует указать полный путь до файла, однако на самом деле указывать его нужно обязательно, например так:

Delete “$INSTDIR\boot.ini”

Delete “$INSTDIR\manifest.dat”

В противном случае функция считает, что файл нужно удалить из корневой директории.

Для исправления ошибки функционал удаления был заменен на перезапись файла

Внимательный читатель может задать несколько очевидных вопросов:

“Зачем один из файлов был назван так же как и файл в OS Windows?”

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

“Почему разработчики Windows не защитили файл, который требуется для запуска системы?”

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

“Почему ошибка не была поймана при прохождении ревью?”

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

“Почему ошибка не была найдена при тестировании?”

Частично проблема уже описана выше - недостаточно времени на разработку и отладку приложения. Так же было обнаружено, что на тестовых стендах не хватало вариативности в железе и настройках ОС. Windows успешно восстанавливал свой загрузочный файл, если ОС находится на первом разделе загрузочного диска. Похоже, что большая часть компьютеров тестировщиков и разработчиков CCP (студия, которая разрабатывает EVE Online) настроена именно таким образом.

Показать полностью
8

Ремонт дорог в ярославле

Как известно, в нашей стране две проблемы: дураки и дороги, и если первых ожно как-то избегать, то по второй приходиться ездить. Суть проблемы в следующем: на маленькой улочке Лермонтова г. Ярославля была очень плохая дорога, вся в ямах, нормально не проехать.

Ремонт дорог в ярославле Без рейтинга, Российские дороги, Ярославль, Длиннопост

И вот недавно ее отремонтировали, все вроде бы отлично, но, по неизвестной причине на дороге оставили ямы, их можно наблюдать на фото. Ям таких на этом маленьком участке набралось аж 10 штук (считал своими колесами). То есть дорожки намеренно их оставили.

Ремонт дорог в ярославле Без рейтинга, Российские дороги, Ярославль, Длиннопост
Ремонт дорог в ярославле Без рейтинга, Российские дороги, Ярославль, Длиннопост

А через год все эти ямы размоет и опять будет не дорога а сплошные буераки. Хочу обратить внимание всех не равнодушных на данный факт и поднять в топ, чтобы такое качество работ не осталось незамеченным и все ответственные были "вознаграждены" по заслугам.

Ремонт дорог в ярославле Без рейтинга, Российские дороги, Ярославль, Длиннопост
Показать полностью 4

Халявные игры после летней распродажи Steam 2018

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

Движки для сайтов.

Здравствуйте пикабушники! Постоянно хочу начать заняться сайтостроением, но писать с нуля слишком олдово и по-хардкору. А потому такой вопрос: подскажите какую программу\движок\макет можно использовать для написания сайта не с нуля, всякие онлайновые конструкторы не подходят. Хотелось что-нибудь, что можно поковырять в офлайновой версии. коменты для минусов внутри

Движки для сайтов. Сайт, Движок, Конструктор, Кот
Отличная работа, все прочитано!