Перейти к содержимому

Донат
На хостинг
ISK за переводы
до 75kk за 1000зн.
Хроники EVE
Сборник
Новичкам
Полезная информация
Фотография

Серьезно - кто из них оригинал?!


  • Авторизуйтесь для ответа в теме
59 ответов в теме

#1
Chegevarich

Chegevarich

    Clone Grade Iota

  • Tech III Pilots
  • PipPipPipPipPip
  • 1551 сообщений
570
  • EVE Ingame:iChegevarich
  • Client:Eng
reported by CCP Explorer | 2011.05.31 13:55:37 |
Оригинал

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

Эта история о том, как мы помогли им.

Перво наперво: Почему они с самого начала не выглядели по разному?

Проблема была в том, что идентификаторы (ID) в нашей системе инвента были одинаковы; блюпринты, которые делали Огров ("Ogres") или Тораксов("Thoraxes") имели одинаковый идентификатор, вне зависимости от того что это, БПО или БПК. Конечно наши таблицы содержали поле тип, но эти атрибуты не хранились в тех же таблицах. Такие атрибуты хранились в специальных таблицах, например в Науке и Производстве (Science and Industry (S&I)) подсистемной таблице в случае с чертежами (blueprints).

Когда вы запрашиваете лист предметов в определенной локации из системы инвента, всё что вы получите - это только "общие атрибуты" атрибуты предметов без более специфичной информации. Таким образом БПО и БПЦ имеют одинаковые базовые атрибуты, в частности для получения параметра "тип" клиенту пришлось бы сделать еще один запрос к серверу (в S&I подсистему) что бы выяснить где оригиналы, а где копии. И именно так же обстояли дела, при нажатии на "показать информацию".

Мы не хотели, что бы вы так жестоко обращались с нашим маленьким милым сервером, когда открывали бы ангар полный чертежей и копий. Это просто ужасное решение, с учетом того, что большее время доп. информация не требуется. Мы так же не хотели создавать условно-объединенные (видимо что то вроде left outer join в mysql. Прим. переводчика.) таблицы каждый раз для отображения содержимого ваших ангаров. Это называется SQL-терроризмЪ!

Так как же так замечательно получилось, что появилась возможность различать БПО и БПЦ без приченения вреда БД?!

Первые шаги мы сделали еще при разработке тираниса с переводом на 64битную разрядность хранения предметов, о котором вы можете почитать в девблоге "64 бита должно хватить всем!". Хотя тот фокус был сделан не совсем для сабжа, но тогда мы сделали отличный шаг с запасом. Мы изменили тип данных в столбце идентификатора, объединили пару столбцов и подчистили устаревшие колонки. Последнее - очень важно! Мы обратили внимание, что столбец 'singleton' (адын) не был частью стека итем айди и мы заюзали его в качестве внешнего ключа. Мы так же зающали поле не отрицательное поле 'quantity' в котором указывалось сколько итемов хранится в стеке. Некоторые из вас возможно заметили, что это взаимоисключающие действия. Singletons должны иметь quantity 1 и что либо с quantity > 1 не может быть singleton (quantity в 1 так же входит в singleton).

Итак, мы решили массово обновить таблицы, проставив всем записям с параметром "singleton" "quantity" = 1, освободив и облегчив таким образом работу БД.

Следующий шаг был сделан в Incursion 1.3, подробности которого вы можете прочитать тут(не нашел перевода сего девблога на еверукоме. Ссылка на инглиш текст. Прим. переводчика.). Это стало продолжение предыдущего этапа, но тут мы чистили особенности, сделали несколько улучшений в защите от эксплойтов и заново ввели поле 'singleton' в структуры БД, но на этот раз как виртуальную колонку. Виртуальная колонка выглядит как обычная для программистов (Ложь. Только если расценивать программиста как человека разбирающего резалтсеты, но не пишущего хранимок и не имеющего отношения к структуре БД. Прим. переовдчика.), на самом деле в ней хранится не значение, а функция, значение которой определяется по другим признакам.

Объединив эти 2 изменения и получив 30битный простор отрицательных значений для зашифровки специальной информации для "singletons" и создали упрощенные (стандартизированные) методы обращения к ним. Мы использовали эти факты и смогли зашифровать отличие оригиналов от копий в сие поле (quantity) (омг, ИНКАПСУЛЯЦИЮ СЮДА!!! прим. переводчика.) как -1 для оригиналов и -2 для копий.

Итак, теперь клиент сразу получает в наборе данных эти параметры как 1 и 2 (мы не возвращаем отрицательные параметры ;)) и может спокойно различать БПЦ и БПО не совершая дополнительных обращений к БД.

Выпендрились, правда?

Теперь у нас есть бэкэнд сортировка БПЦ и БПО по "singleton" фрагу, т.е. у нас уже все готово, не так ли?

Нифига. Это теперь отлично работает в вашем ангаре, в багажнике индуса или в специальном каргохолде, т.к. туда направляются флаги различий. Но что ж теперь делать с местами, куда такие флаги не направляются, например ЛПшоп? Там у нас нет реального итема и нет соответсвующей записи о чертеже в таблицах поддержки о том, какой чертеж будет создан. В данном случае нам несомненно помогло то, что в LP Store есть только БПЦ, а метаданные мы могли получать по описанию несуществующего четрежа, что бы отобразить информацию о нем, как о существующем объекте.

Так и что я получил то в конце концов?

Так как мы теперь имеем 2 очень разные по форме вещи, с отдельными иконками, отдельными метаданными, мы можем вводить больше отдельных спец. классов функций. В каждом месте они теперь будет не просто выглядеть по разному, но и иметь различную функциональность. И по этому сейчас тыкая на иконку копии вы уже ждете, что вам отобразится соответсвующая функциональность. До этого вы не смогли бы получить эту информацию таким простым методом, как просто посмотреть как это выглядит. Но спецуевые поля обрабатываются на стороне клиента не дозапрашивая информации у сервера, что позволяет сделать общение с БД более дружественным, что очень важно в такой большой ММО игре.

Конечным результатом всех этих трудов стал Incursion 1.5.

Это была сложная работа, в ней принимало участи куча народу, было развернуто в 3 подхода, но теперь, наконец таки, вы можете визуально отличить БПО от БПЦ!

И теперь вы знаете как!

спойлерОфициальный перевод

Оригинал
На протяжении многих лет промышленники EVEOnlineстрадали от невозможности быстро найти оригиналы ценных чертежей среди многочисленных копий.

Эта статья посвящена тому, как нам удалось исправить положение.

Начнем сначала: почему копии и оригиналы вообще выглядели одинаково?

Проблема заключалась в способе указания идентификаторов типа (typeID) в нашей системе учета объектов: чертеж, например, чертеж «Ogre» или «Thorax» обладал определенным идентификатором типа вне зависимости от того, являлся ли он оригиналом (BPO) или копией (BPC) ― и этот идентификатор задавал производимый с помощью этого чертежа предмет. Идентификаторы типа входят в таблицу учета предметов в игре (и каждый предмет обладает своим идентификатором) ― но характеристики данного типа предметов хранятся в отдельных таблицах (в случае чертежей ― в таблице «ScienceandIndustry»).

Когда игровой клиент запрашивает список объектов у системы учета, он получает лишь базовый перечень характеристик предметов, а не информацию из упомянутых выше таблиц. Базовые характеристики (в частности, идентификаторы) оригиналов и копий чертежей одинаковы, и поэтому для того, чтобы узнать, с чем именно игрок имеет дело, клиенту приходилось еще один раз обращаться к серверу (к таблице «ScienceandIndustry»). Именно это и происходило при выполнении команды «Показать информацию» для чертежа.

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

Так как же нам удалось решить эту проблему без отрицательных последствий для базы данных и сервера?

Первый шаг был сделан с выходом обновления Tyrannis1.2в конце прошлого года (дополнительная информация ― в статье «64 bitsshouldbeenoughforeverybody» ). Хотя основная часть работы была посвящена переходу на 64-битные идентификаторы в системе учета предметов, мы этим не ограничились. Мы изменили структуру таблицы объектов, увеличили количество битов в идентификаторах и других элементах таблицы, удалили один устаревший атрибут и объединили еще два. Последний момент особенно важен в контексте данной статьи. Раньше в базе данных существовало поле “singleton” («одиночка») типа «бит»; оно указывало, что данный объект не является частью группы предметов, и что его идентификатор может использоваться в других таблицах. Второе поле, «количество», определяло количество находящихся в группе предметов. Легко видеть, что значения этих полей взаимоисключающи. Объекты-«одиночки» должны входить в группу, состоящую только из одного предмета, а группа из более чем одного объекта не может являться «одиночкой» (при этом стоит отметить, что группа из одного предмета не обязательно является «одиночкой»).

Чтобы сохранить место в базе данных (и обеспечить быстродействие игры), эти поля были объединены в новое поле типа «integer» (целое число) ― при этом объекты, для которых значение этого поля является отрицательным, считаются «одиночками». Чтобы перейти от старой системы к новой, достаточно было заменить все значения «singleton==1» на «quantity=-1».

Следующий шаг мы сделали, выпустив обновление Incursion1.3(дополнительная информация – в статье «Inventorycorificationpart2 - creationofCARBONInventory». Мы продолжили начатую в ходе предыдущего этапа работу, ввели ряд мер, направленных на борьбу с читерами, упростили внутренний интерфейс для работы с системой объектов ― А ТАКЖЕ добавили поле «одиночка» в структуру данных DBRow, но на этот раз в качестве виртуального поля. С точки зрения программирования виртуальное поле выглядит точно так же, как и обычное, но обращение к нему происходит с помощью специальной функции (которая в нашем случае принимает в качестве исходных данных и значение поля «количество»).

В результате этих изменений мы получили 30-битный диапазон (для отрицательного значения этого поля), где можно хранить различную информацию в зависимости от типа объекта, а также единый способ доступа к ней. Если говорить о чертежах, то для оригиналов значение поля «качество» стало равным -1, а для копий ― -2.

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

Изящно, не так ли?

Но, к сожалению, этого недостаточно.

Данный метод хорошо работает при отображении оригиналов и копий чертежей в вашем ангаре ― ведь мы знаем значение флага «одиночка». Но что делать, если объекта еще не существует (как, например, в случае с чертежами в магазине наград)? Ведь если предмета физически нет в игре, то и данные в соответствующих дополнительных таблицах отсутствуют. В данном случае проблема решается просто: мы знаем, что в магазине наград продаются только копии чертежей, а необходимая информация (количество партий и качество) хранится в структуре конкретного предложения. Эту информацию мы и передаем игровому клиенту, когда вы запрашиваете информацию о еще несуществующем чертеже.

Итак, о чем это я?

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

Результат этой работы вы можете наблюдать в игре после выхода обновления Incursion1.5.

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

А благодаря этой статье вы знаете, как именно мы этого добились.

Сообщение отредактировал Chegevarich: 03 June 2011 - 19:40

  • 16

#2
Psihius

Psihius

    Clone Grade Lambda

  • Tech III Pilots
  • PipPipPipPipPipPip
  • 3954 сообщений
911
  • EVE Ingame:psihius
  • EVE Alt:Loriel'a
  • Corp:Void Effect
  • Client:Eng
На заметку тем, кто говорит что все просто. Иногда простейшая вещь сделана в нутри очень сложно.
  • -1

Сообщество FactorioMMO: Discord , Reddit


#3
glkudr

glkudr

    Clone Grade Kappa

  • Tech III Pilots
  • PipPipPipPipPip
  • 3708 сообщений
714
  • EVE Ingame:GlKudr
  • Corp:Space Cleaners
  • Ally:exBSoD
  • Client:Eng

Так как мы теперь имеем 2 очень разные по форме вещи, с отдельными иконками, отдельными метаданными, мы можем вводить больше отдельных спец. классов функций.


Я уже жду массового дропа БПО на мачалы и других неожиданных вещей :lol:

Сообщение отредактировал glkudr: 31 May 2011 - 19:42

  • 0

#4
Franky

Franky

    Clone Grade Kappa

  • Tech III Pilots
  • PipPipPipPipPip
  • 2305 сообщений
129
  • EVE Ingame:Franky Burns
  • Corp:Frag Logistics
  • Client:Eng
Лаги пофиксили?

А ну вообще, скилл на патч придется ставить очень длинный.
  • 0

#5
OSH1m@

OSH1m@

    Clone Grade Ksi

  • Tech III Pilots
  • PipPipPipPipPipPipPipPipPip
  • 10694 сообщений
67
  • EVE Ingame:Osh1mA
  • Channel:Russian
  • Client:Eng

Лаги пофиксили?

А ну вообще, скилл на патч придется ставить очень длинный.

Вообщето разные картинки БПО и БПЦ на транке есть УЖЕ :facepalm:
  • 0
"Вокруг черной дыры же дофига фотонов! Почему же она не светится как ЗВЕЗДА! Ха-Ха ваша наука ПАСУЕТ перед этим ФАКТОМ!"(с)6xlfgK.png

#6
keylover

keylover

    Clone Grade Iota

  • Tech III Pilots
  • PipPipPipPipPip
  • 1473 сообщений
2316
  • Client:Рус
Еще бы цыферка количества копий на бпц-шке появилась.. было бы вообще замечательно. Но и на том спасибо - реально доставало лопатить горы чертежей в поисках оригиналов.
  • 0

 


#7
Мейер

Мейер

    Форумный бредогенератор

  • Tech III Pilots
  • PipPipPipPipPip
  • 2731 сообщений
1388
  • EVE Ingame:Dives Armenicus
  • Corp:NPC
  • Ally:Amarr empire
  • Channel:off
  • Client:Eng

Я уже жду массового дропа БПО на мачалы и других неожиданных вещей :lol:


ИМХО наоборот, патч призван исключить эти баги.
  • 0

... loading ...


#8
OSH1m@

OSH1m@

    Clone Grade Ksi

  • Tech III Pilots
  • PipPipPipPipPipPipPipPipPip
  • 10694 сообщений
67
  • EVE Ingame:Osh1mA
  • Channel:Russian
  • Client:Eng

ИМХО наоборот, патч призван исключить эти баги.

Какой патч?? :facepalm: Какие баги ?? :facepalm:
  • 0
"Вокруг черной дыры же дофига фотонов! Почему же она не светится как ЗВЕЗДА! Ха-Ха ваша наука ПАСУЕТ перед этим ФАКТОМ!"(с)6xlfgK.png

#9
справедливость

справедливость

    Clone Grade Alpha

  • Tech III Pilots
  • Pip
  • 56 сообщений
11
  • EVE Ingame:Секретно
  • EVE Alt:нет
  • Corp:npc
  • Channel:rassian
  • Client:Рус
Объясните, что значить этот смайл :facepalm:
  • 0

#10
Chegevarich

Chegevarich

    Clone Grade Iota

  • Tech III Pilots
  • PipPipPipPipPip
  • 1551 сообщений
570
  • EVE Ingame:iChegevarich
  • Client:Eng

ИМХО наоборот, патч призван исключить эти баги.

Это девблог - флэшбэк, он как бы поясняет что было то в 1.5, и как оно было на самом деле.

btw : ИМХО его выпустили - что бы капсулирам было что почитать во время увеличеного большого ДТ :)
  • 0

#11
Takeshi Ryuu

Takeshi Ryuu

    Clone Grade Eta

  • Tech III Pilots
  • PipPipPipPip
  • 696 сообщений
361
  • EVE Ingame:Takeshi Ryuu
  • Corp:IRR
  • Client:Eng
Chegevarich, спроси у Trimutius III, где и как он поднимал свой английский. Твои переводы сейчас аля "ранний Трим", более известный на данном форуме как промт. За скорость перевода и за сам факт того, что берешься переводить - огромное спасибо, но давай же в качество переходи.
  • -2

#12
OSH1m@

OSH1m@

    Clone Grade Ksi

  • Tech III Pilots
  • PipPipPipPipPipPipPipPipPip
  • 10694 сообщений
67
  • EVE Ingame:Osh1mA
  • Channel:Russian
  • Client:Eng

Chegevarich, спроси у Trimutius III, где и как он поднимал свой английский. Твои переводы сейчас аля "ранний Трим", более известный на данном форуме как промт. За скорость перевода и за сам факт того, что берешься переводить - огромное спасибо, но давай же в качество переходи.

Да ладно, а помоему вполне читабельно...
Не нравится-читай оригинал :facepalm:
  • 1
"Вокруг черной дыры же дофига фотонов! Почему же она не светится как ЗВЕЗДА! Ха-Ха ваша наука ПАСУЕТ перед этим ФАКТОМ!"(с)6xlfgK.png

#13
Marseliy

Marseliy

    Newbie

  • Tech II Pilots
  • 14 сообщений
0
  • Client:Eng

Это девблог - флэшбэк, он как бы поясняет что было то в 1.5, и как оно было на самом деле.

btw : ИМХО его выпустили - что бы капсулирам было что почитать во время увеличеного большого ДТ :)

Ага, прочитать и пол часа вникать)
  • 0

#14
Chegevarich

Chegevarich

    Clone Grade Iota

  • Tech III Pilots
  • PipPipPipPipPip
  • 1551 сообщений
570
  • EVE Ingame:iChegevarich
  • Client:Eng

Chegevarich, спроси у Trimutius III, где и как он поднимал свой английский. Твои переводы сейчас аля "ранний Трим", более известный на данном форуме как промт. За скорость перевода и за сам факт того, что берешься переводить - огромное спасибо, но давай же в качество переходи.

Бро, я стараюсь, но не всё сразу. Товарищ Trimutius III имеет профильное лингвистическое образование. Я же по образованию инжинер - экономист, который работает программером ;) Английские тексты, которые я регулярно читаю - тех. описания функций языков и классов фреймворков, которые я юзаю в работе. Да, я не лингвист, но я стараюсь сделать так, что бы русскоговорящие игроки узнавали новости с примерно той же скоростью что и забугорные англоязычные пилоты, ибо абонку мы платим одинаковую (европейцы чуть больше, они 15 евро, мы 15 баксов, как и америкосы). Если кому не нравится мой перевод - может читать оригинал, подождать официальный перевод от ЦЦП, перевести самостоятельно и проч. и проч. Я стараюсь совершенствоваться в переводе, делая это не за деньги, а просто так, ибо это хобби полезно не только мне.

За комплимент - промтоперевод - отдельное спасибо.
  • 7

#15
Мейер

Мейер

    Форумный бредогенератор

  • Tech III Pilots
  • PipPipPipPipPip
  • 2731 сообщений
1388
  • EVE Ingame:Dives Armenicus
  • Corp:NPC
  • Ally:Amarr empire
  • Channel:off
  • Client:Eng

Это девблог - флэшбэк, он как бы поясняет что было то в 1.5, и как оно было на самом деле.

btw : ИМХО его выпустили - что бы капсулирам было что почитать во время увеличеного большого ДТ :)


ну да

Какой патч?? :facepalm: Какие баги ?? :facepalm:


патч который исправил вот
спойлерэто
Проблема была в том, что идентификаторы (ID) в нашей системе инвента были одинаковы; блюпринты, которые делали Огров ("Ogres") или Тораксов("Thoraxes") имели одинаковый идентификатор, вне зависимости от того что это, БПО или БПК. Конечно наши таблицы содержали поле тип, но эти атрибуты не хранились в тех же таблицах. Такие атрибуты хранились в специальных таблицах, например в Науке и Производстве (Science and Industry (S&I)) подсистемной таблице в случае с чертежами (blueprints).


Сообщение отредактировал Мейер: 31 May 2011 - 20:09

  • 0

... loading ...


#16
glkudr

glkudr

    Clone Grade Kappa

  • Tech III Pilots
  • PipPipPipPipPip
  • 3708 сообщений
714
  • EVE Ingame:GlKudr
  • Corp:Space Cleaners
  • Ally:exBSoD
  • Client:Eng

ИМХО наоборот, патч призван исключить эти баги.


Знаешь законы Мерфи?
  • 0

#17
Мейер

Мейер

    Форумный бредогенератор

  • Tech III Pilots
  • PipPipPipPipPip
  • 2731 сообщений
1388
  • EVE Ingame:Dives Armenicus
  • Corp:NPC
  • Ally:Amarr empire
  • Channel:off
  • Client:Eng

Знаешь законы Мерфи?


Да хоть тройку навскидку
1. Если вы придумали имба фит, это понерфят
2. Если даже после нерфа ваш фит имба, во время самого важного сражения у вас отключат интернет.
3. Если у вас фит неубиваем впринципе и 100500 резервных подключений к интернету, вы будете единственным из 100500 пилотов который не увидит ничего кроме черного экрана лагов.

Сообщение отредактировал Мейер: 31 May 2011 - 20:20

  • 0

... loading ...


#18
Steelworks

Steelworks

    Clone Grade Theta

  • Tech III Pilots
  • PipPipPipPip
  • 1381 сообщений
468
  • EVE Ingame:Steelworks II
  • Corp:SoT
  • Ally:DS
  • Channel:507
  • Client:Eng

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

Но далеко не всегда реализация простой вещи сложным методом положительно характеризует разработчика.
  • 0

#19
OSH1m@

OSH1m@

    Clone Grade Ksi

  • Tech III Pilots
  • PipPipPipPipPipPipPipPipPip
  • 10694 сообщений
67
  • EVE Ingame:Osh1mA
  • Channel:Russian
  • Client:Eng

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

Согласен на все стопицот, CCP поразительный пример всего сего :lol:
  • 0
"Вокруг черной дыры же дофига фотонов! Почему же она не светится как ЗВЕЗДА! Ха-Ха ваша наука ПАСУЕТ перед этим ФАКТОМ!"(с)6xlfgK.png

#20
Eretic

Eretic

    Легат Возврата

  • Tech III Pilots
  • PipPipPipPipPipPip
  • 5197 сообщений
446
  • EVE Ingame:KB Eretic
  • Client:Eng
В данном случае у нас есть БД возрастом лет так 8, если не старше, и которая писалась почти что на коленке. И решение, кстати, оказалось весьма элегантным в сложившихся обстоятельствах, заодно расширившее возможности дальнейших изменении.
  • 0
Ересь - иной взгляд на привычные вещи

Не зная ни сна, ни отдыха, при лунном и солнечном свете мы делаем деньги из воздуха, что бы снова пустить их на ветер

Сражение, это странный опыт. Мы планируем действия за счет интеллекта, сражаемся за счет инстинктов, и только потом понимаем, что выжили лишь благодаря случаю.(с)Из письма Фиска Блэка своей сестре Люси.




0 посетителей читают тему

0 members, 0 guests, 0 anonymous users