Cheb's Game Engine

Планы, идеология, архитектура и т.п.

Модератор: Модераторы

Re: Cheb's Game Engine

Сообщение Лекс Айрин » 19.09.2017 09:29:56

Cheb писал(а):Года три уже подыскиваю замену, но в упор не вижу в продаже ничего, хотя бы равноценного.


Ну-ну... поищи. Сейчас все уперлось в 2 причины:
1) уменьшение элементной базы очень затруднено. (плато возможности)
2) мощнее просто мало кому нужно. (плато желания) Для чего-то более-менее серьезного есть станционары.
Вот когда появится реальная система, которая будет нужна людям и будет требовать более мощного нетбука/планшета, тогда дело сдвинется с места. А пока это все аналоги записной книжки нет смысла заморачиваться. Пипл хавает? Хавает! Продаем то, что есть.

Cheb писал(а):Выломавшуюся петлю - притянул винтами M3x10, брутально просверлив насквозь корпуса.


можно еще подключить внешний моник, тогда крышку можно банально снять.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Cheb's Game Engine

Сообщение Cheb » 19.09.2017 16:12:14

Пипл хавает? Хавает! Продаем то, что есть.

Воистину :(
На самом деле, аналоги в продаже есть - но... жаба. Ибо от 60 до 70 т.р.
Потихоньку приступил к реализации своего Хитрого Плана, к новому году расскажу, что получится :mrgreen:

можно еще подключить внешний моник,

99% времени так.

тогда крышку можно банально снять.

И, как минимум, потерять WiFi, поскольку антенна - в крышке. Не говоря уже, что получился бы неполноценный десктоп вместо полноценного мобильного девайса.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Лекс Айрин » 19.09.2017 16:47:09

Cheb писал(а):И, как минимум, потерять WiFi, поскольку антенна - в крышке. Не говоря уже, что получился бы неполноценный десктоп вместо полноценного мобильного девайса.


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


Cheb писал(а):На самом деле, аналоги в продаже есть - но... жаба. Ибо от 60 до 70 т.р.

это считай, что нет. Отдать за ноут цену сервера начального уровня, имхо, это только если уж денег совсем много. Ну или это модель должна выдерживать хотя бы попытку переехать его камазом.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Cheb's Game Engine

Сообщение Cheb » 20.09.2017 12:52:51

хоть приклеить к корпусу.

Не буду спорить - скажу только, что все эти альтрешения удобные, как плавать в сапогах.

это считай, что нет. Отдать за ноут цену сервера начального уровня, имхо, это только если уж денег совсем много.

Моя жаба выражает полное согласие :mrgreen:

З.Ы. Наткнулся на одну строчку кода, поразившую меня в самое сердце. Немедленно включил в свои исходники.
Главное - доделать и не сдаваться!
Код: Выделить всё
{
    "Dreams are promises to yourself. You should never break a promise."
                                    Monkey D. Luffy, "Boy With a Scar" by Syluk


З.З.Ы.
Настроился на долгий, изматывающий поиск неуловимого бага, но оказалось, что в текстуре сжатого шрифта пиксел, который должен быть в левом верхнем углу, оказался сдвинут вниз. Приступ косорукости когда ставил его. Оттого гистограммы профайлера и исчезали при переключении на сжатый шрифт. :oops:
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Лекс Айрин » 20.09.2017 17:22:57

Cheb писал(а):Не буду спорить - скажу только, что все эти альтрешения удобные, как плавать в сапогах.


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

Пока что можно только телевизор использовать как монитор. А хотелось бы, например, слушать музыку с компа через телефон. Настроив трансляцию на компе.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Cheb's Game Engine

Сообщение Cheb » 01.10.2017 20:42:13

Упетлился в сторону: настолько задрали непрерывно вылазящие траблы с поддержкой юникодных путей - то один кусок окаменелого говнокода с намертво вшитой опорой на AnsiString всплывёт, то другой - что решил снести к ядрёной фене под корень, переопределить свои версии функций RTL, которые на винде тоже работали бы в utf-8 и объединить с двумя существующими хаками для 2.6.4 и 3.0, которые обеспечивают utf-8 поддержку ini файлов.

Заодно выполол кучу мест в коде, где обеспечивалась совместимость с Windows 98 развесистыми условными директивами.

Почти всё доделал, но этот чёртов TProcess! Мне эту самку собаки с нуля передирать, со всеми потрохами :evil: Не, нуегона. следующие выходные.

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

Воистину :evil:
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение olegy123 » 02.10.2017 11:46:19

Лекс Айрин писал(а):
Cheb писал(а):Не буду спорить - скажу только, что все эти альтрешения удобные, как плавать в сапогах.


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

Пока что можно только телевизор использовать как монитор. А хотелось бы, например, слушать музыку с компа через телефон. Настроив трансляцию на компе.

По опыту скажу, что этим занимаются полтора человека во всем мире и то эти полтора человека у них своеобразный мир, не исключено что их мир создан тяжелыми наркотиками. И корпорации насильничают - требуют чтобы использовался только их штепсель..
Вполне реально и такой расклад: Топ менеджеры получают богатства, а идею воплощают индусы с корочками об окончании недельных образованием - за доширак.
Поэтому не скоро твои мечты исполнятся..
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Cheb's Game Engine

Сообщение Лекс Айрин » 02.10.2017 12:11:07

olegy123 писал(а): не исключено что их мир создан тяжелыми наркотиками.


В данном случае, пофиг.

olegy123 писал(а):По опыту скажу, что этим занимаются полтора человека во всем мире


На самом деле, конечно, больше, но, боюсь, максимум на порядок(((
olegy123 писал(а):а идею воплощают индусы с корочками об окончании недельных образованием - за доширак.

Ну... индокод не может существовать на уровне интеграции системы, поэтому опытные программисты тоже должны участвовать.

olegy123 писал(а):Поэтому не скоро твои мечты исполнятся..

Пока да. Но когда начнется активное внедрение расширенной реальности, то придется... а то, что штепсель один... тут уж никуда не деться. Хотя есть сомнения, так как желающих использовать свой формат более одного.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Cheb's Game Engine

Сообщение olegy123 » 02.10.2017 13:48:49

Лекс Айрин писал(а):
olegy123 писал(а):а идею воплощают индусы с корочками об окончании недельных образованием - за доширак.

Ну... индокод не может существовать на уровне интеграции системы, поэтому опытные программисты тоже должны участвовать.
недавно из за выявленной дырке в OpenSSL пришлось банкам перевыпускать карты.Недавно еще одну дырку приоткрыли в SSH дающий доступ к системе..
Apple использует ядрышко BSDшное..

PVS-Studio периодически показывают, публикую блоги - так вот продают продукт за много долларов, и им дают протестировать - там код писали обдолбыши.. Это то что видно, а то что не видно..
У нас вакансии: суппорт продуктов со знанием языков. Сам заказчик сидит в калифорнии, периодически жарит телок в порнохабе, сам код пишут индусы и китайцы, а секс с клиентами проводят по телефону из мухостранска. Вот такой современный глобальный софт-бизнес.

Добавлено спустя 8 минут 43 секунды:
Лекс Айрин писал(а):
olegy123 писал(а):Поэтому не скоро твои мечты исполнятся..

Пока да. Но когда начнется активное внедрение расширенной реальности, то придется... а то, что штепсель один... тут уж никуда не деться. Хотя есть сомнения, так как желающих использовать свой формат более одного.
Ха, я тут решил поиграть в игру в маске от телефона..за 40к..
Игра пошла, но надписи не видно..
Вот хочу когда разбогатею сделать два телефона.. где общая картинка была бы в 4k. по 2K на каждый глаз
там все просто - стримить в поток и проигрывать.. почему нельзя?
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Cheb's Game Engine

Сообщение Лекс Айрин » 02.10.2017 14:12:51

olegy123, а что ты хотел? Это, батенька, мир на С/С++, когда проверок на граничные/допустимые условия не делается, ибо лень заморачиваться.

А ведь есть определенные, довольно серьезные, методики отладки кода еще времен больших компов.И неважно кто сделал, главное, что проверку код прошел/не прошел.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Cheb's Game Engine

Сообщение Cheb » 02.10.2017 21:04:31

Автором этого сообщения является olegy123, находящийся в вашем чёрном списке. Показать это сообщение.

Просьба не флудить в теме моего проекта.

Автором этого сообщения является olegy123, находящийся в вашем чёрном списке. Показать это сообщение.

Просьба не флудить в теме моего проекта.

Лекс Айрин писал(а):
olegy123 писал(а):[...]

[...]

Просьба не флудить в теме моего проекта.

P.S. Проблема с TProcess рассосалась сама: костыли на его основе использовались только в линуксе, а в линуксе никаких проблем с юникодностью нет.
(если кому интересно: для обращения ко всяким терминальным приблудам линя, вроде получения названия дистрибутива или температуры ядер RaspberryPi)

Проект, наконец, собрался - и упал сразу после запуска.
Надо олаживать - вот радость то.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Cheb » 04.10.2017 11:50:30

[тяжкий вздох]

Изображение

UPD, 05.11.17: Прогресса доолго ещё не будет.
- разгребаю барахло. Бывает так, что перед гостями срочно прибраться, вещи кучей в коробку, коробку - на антресоль, на потом. У меня двадцать лет таких "потом" накопилось, выматывает так, что отпуск не помогает.
- продолжаю писать фанфик-кроссовер Ранмы и Шантэ, на двух языках одновременно.
- веду подготовительные работы к созданию самодельного портативного компьютера. Алиэкспресс трещит от натуги, жаба забилась в уголок и даже уже плакать не может.
- восстанавливаю радиолюбительскую лабораторию (запиханную на антресоль в 90-х). Текущий результат: удавил бы того гада, что в детстве подсунул мне тот припой, которым всю жизнь пользовался. Он, оказывается, высокотемпературный! ПОС-61 по сравнению с ним - просто смазка к салазкам в рай. Не удивительно, что все мои детские поделиЯ спаяны через ... одно место.

UPD, 09.01.18: Всё ещё вожусь с хтоническим юбер-девайсом, мастеря ящик.
Вчера вышел нежданчик: выяснилось, что жифорсина не лезет. Пришлось взяться за ножовку:
Изображение

Если кому интересно, мой фанфик пишется хорошо: Танцуй-танцуй заварушка

UPD, 10.01.18: Переосмысление парадигмы
Общего самодельного менеджера памяти не будет. Будет сугубо специализированный менеджер памяти посредством собственной NewInstance для TManagedObject: инстансы будут храниться не в хипе, а в специальных пулах памяти, выделяемых постранично от ОС. Как и в более раннем варианте, это нужно для особых полей, хранимых компактно:
- флаги: чтоб было.
- индекс для обхода графа: это поле модифицируется у каждого обходимого объекта, и хранение его внутри инстанса - дикое загрязнение кеша. В идеале, должны не только храниться отдельно, но и очистка этих полей после обхода графа должна осуществляться освобождением памяти, где они лежали.
- счётчик ссылок: нужно сохранять возможность модификации когда память пула защищается от записи (нужно для отладки).

Структура такая: при старте менеджер резервит у ОС блок памяти, на гигабайт примерно. Пулы коммитятся внутри него с таким выравниванием, чтобы из любого указателя получался указатель на начало пула путём тупого округления по маске. А в начале пула лежит указатель на собственно его служебную запись, являющуюся обычным объектом в хипе. Все хранилища для специальных полей в нём - обычные массивы в том же хипе.
Таким образом количество велосипедов сводится к минимуму.
Для большей тупизны каждый пул расчитан на инстансы строго одного размера, и принадлежит конкретному потоку (я тут убедился, что GetCurrentThreadId() - эпически быстрая вещь, в линуксе это просто алиас pthread_self() ). Выделяются блоки без всяких блокировок, а освобождаются из не своего потока - посредством передачи сообщений "тут у тебя блок освободился" потоку-владельцу, и уж на этом механизме-то критические секции стоят. А освобождает поток-владелец когда заметит, что очередь сообщений не пуста.
Поскольку такие случаи - нештатные, получаем 99% операций выделения/освобождения - быстрые, без критических секций.

Кроме радикального уменьшения загрязнения кеша, подобный менеджер памяти инстансов позволяет менять защиту памяти для пулов конкретных потоков, без чего нормальная отладка многослойной физики просто невозможна. А с этой защитой - ваылезет AV как только какой-то косоруко запрограммированный объект полезет писать куда не следует. И, соответственно, многослойность можно реализовать гораздо тупее, без изобретения дополнительных велосипедов.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Cheb » 11.01.2018 18:50:28

Заставил таки движок, собранный третьим паскалем, работать из папки "/人◕‿‿◕人\".

Копать пришлось глубоко, причина оказалась тривиальна: см. тему Эпичный нежданчик с RawByteString

В движке применяется целый слой заплаток, виндовый екзешник - гарантированно юникодный при сборке как в fpc 2.6.4 (я собираюсь поддерживать его ещё долгие годы) так и в fpc 3.0.4. Кодировка для работы с файлами на всех платформах - utf8.

Код: Выделить всё
function ParamStr(num: integer): TFilenameString;
var
  TST: UnicodeString;
begin
  if num > 0 then Result:= system.ParamStr(num)
  else begin
    SetLength(TST, Max_Path + 2);
    SetLength(TST, GetModuleFileNameW ( THandle(0),  @TST[1], Length(TST) - 1));
    Result:= UnicodeToFileName(TST);
  end;
end;

Procedure FileClose (Handle : THandle);
begin
  // I simply CANNOT BELIEVE they dragged this bug along into 3.0.2 RTL!
  // Can cause crashes of a program running in Wine.
  //  if Handle <= 4
  //    then exit;
  if Handle <= 0 then exit;
  CloseHandle(Handle);
end;

Function FileOpen (Const FileName : TFilenameString; Mode : Integer) : THandle;
begin
  result := CreateFileW(PWideChar(FilenameToUnicode(FileName)), dword(AccessMode[Mode and 3]),
                       dword(ShareModes[(Mode and $F0) shr 4]), nil, OPEN_EXISTING,
                       FILE_ATTRIBUTE_NORMAL, 0);
end;

constructor TFileStream.Create(const AFileName: TFileNameString; Mode: Word; Rights: Cardinal);
var
  h: THandle;
begin
  FFileName:= AFileName;
  If (Mode and fmCreate) > 0 then
    h:= FileCreate(AFileName,Mode, Rights)  // it IS already unicode in 3.0.0
  else
    h:= FileOpen(AFileName, Mode);

  If (h = feInvalidHandle) then
    If Mode = fmcreate then
      Die(RuEn('Не удалось создать файл "%0"','Failed to create file "%0"'),[AFileName])
    else
      Die(RuEn('Не удалось открыть файл "%0"','Failed to open file "%0"'),[AFileName]);
  inherited Create(h);
end; 

Function FindFirst (Const Path : TFileNameString; Attr : Longint;
                                              out Rslt : TSearchRec) : Longint;
begin
  Name:= Path;
  Rslt.Attr:=attr;
  Rslt.ExcludeAttr:=(not Attr) and ($1e);
                 { $1e = faHidden or faSysFile or faVolumeID or faDirectory }
  { FindFirstFile is a Win32 Call }
  Rslt.Handle:= FindFirstFileW (PWideChar(FilenameToUnicode(Path)),Rslt.FindData);
  If Rslt.Handle=Invalid_Handle_value then
   begin
     Result:=GetLastError;
     exit;
   end;
  { Find file with correct attribute }
  Result:= FindMatch(Rslt);
end;

Function FindNext (Var Rslt : TSearchRec) : Longint;
begin
  if FindNextFileW(Rslt.Handle, Rslt.FindData) then
    Result := FindMatch(Rslt)
  else
    Result := GetLastError;
end;

Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Cheb » 28.01.2018 01:29:37

Восстановил малину: файловая система побилась - пришлось вставлять microSD карточку в SD адаптер, вставлять в кардридер древней линуксовой машины и науськивать на неё fsck. Какого лешего raspbian после каждого нештатного отключения становится неспособна загрузиться хотя бы на чтение, чтобы до fsck добраться? :x

Собрал модуль-матку на малине фпцём 3.0.0. Собралось пошло.
Попытался собрать на Win64 фпцём 3.0.4 . Обломалось на ассемблерной вставке (которая раньше, в 3.1.1, работала, а в 32-битной версии и сейчас компилируется):
Код: Выделить всё
      function FastInverseSquareRoot(a: float): float; inline; assembler;
      asm
        RSQRTSS xmm7, [a]
        MOVSS [Result], xmm7
      end['xmm7'];

Бычит "Error: Invalid register used in memory reference expression: "xmm0"" на строчке RSQRTSS xmm7, [a]

P.S. Решилось удалением квадратных скобок: RSQRTSS xmm7, a
Какого?.. :shock:

Добавлено спустя 51 минуту 53 секунды:
Временно замораживаю поддержку x86-64:
* отладочная информация под виндовс генерируется через анус, в бектрейсах одни голые адреса. Надо разбираться. Почему под win64 генерируется окаменелое говно мамонта dwarf2 вместо нормальной stabs, хотя я компилятору ясным русским языком говорю: -gs ? :evil: То-ли лыжи не едут, то-ли я ██████ :x
* у меня нет 64-битной линуксовой машины. Разобрал на дрова в процессе разработки хтонического убер-девйаса:
Изображение
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Cheb » 02.02.2018 22:00:08

Исследую детерминизм.

Оказывается, что всё не так страшно, как ожидалось.
И даже на Raspberry Pi всё совпадает до бита (хотя и в 5..30 раз медленнее). Даже синус. :(
Фальшивый синус, правда, в три раза быстрее на всех платформах (он состоит из нескольких умножений и одного деления)

(вычисляется путём операций над всеми числами диапазона. Умножение - над всеми числами с плавающей запятой, кроме крайних двух позиций экспоненты, давшими бы переполнение, а синус - от всех чисел, возможных в диапазоне от нуля до пи.

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

[это была глюкавая лажа, а не тест. Полный провал.]

Добавлено спустя 2 часа 42 минуты 12 секунд:
... сделал по нормальному.

Здесь rsqrt(), bd_rsqrt(), bd_sin() - мои хтонические велосипеды, остальное - штатные функции.
Причём, rsqrt() - быстрая, на RSQRTSS, но не фига не детерминистичная, даже на разных x86 SSE2 даёт разные результаты
а bd_rsqrt() - детерминистичная, но тормозная (над XMM регистрами побитовые операции невозможны, а напрямую в регистр общего назначения тоже невозможно передать - вот компилятор и гоняет значение через память, два раза туда-сюда)
Код: Выделить всё
win32 + sse2 @ i5-2450M 2.5GHz + PC3-10600 (RAM limit 1.3 GFLOPS):
(intel burn test gives ~20 GFLOPS for a single core)
  Checking CPU/compiler combo for floating point determinism...
    ..checking rsqrt()
      ..ok, in 49 (pure 6.68) seconds (0.319 GFLOPS)
      ..md5 checksum = 95389BA76240737D6323FA5F7A549852
    ..checking bd_rsqrt()
      ..ok, in 59 (pure 17.2) seconds (0.124 GFLOPS)
      ..md5 checksum = 985241AB7340A4550C995119AEEC5E7B
    ..checking sqrt()
      ..ok, in 53 (pure 10.1) seconds (0.21 GFLOPS)
      ..md5 checksum = 5A50783537304E8D28DDC3C7D7FC3E6A
    ..checking multiplication by Pi..
      ..ok, in 55 (pure 6.47) seconds (0.648 GFLOPS)
      ..md5 checksum = 9CA6E7B818FA046C3DAE722C35196729
    ..checking bd_sin()..
      ..ok, in 17 (pure 5.35) seconds (0.2 GFLOPS)
      ..md5 checksum = 9E39629C4577EEF4BDE30EE13047F9F9
    ..checking sin()..
      ..ok, in 38 (pure 25.8) seconds (0.0415 GFLOPS)
      ..md5 checksum = 4DE8EFC27CBB692E5E3DEB7A7E561EAB
    
win32 + sse2 @ Phenom II X6 1090T 3.2GHz + PC3-8500 (RAM limit 1.0 GFLOPS):
(intel burn test gives ~10 GFLOPS for a single core)
    ..checking rsqrt()
      ..ok, in 50 (pure 10.9) seconds (0.195 GFLOPS)
      ..md5 checksum = 099065E6029AB6F582165CC92DECF8AC
    ..checking bd_rsqrt()
      ..ok, in 57 (pure 18.3) seconds (0.116 GFLOPS)
      ..md5 checksum = 985241AB7340A4550C995119AEEC5E7B
    ..checking sqrt()
      ..ok, in 48 (pure 10) seconds (0.213 GFLOPS)
      ..md5 checksum = 5A50783537304E8D28DDC3C7D7FC3E6A
    ..checking multiplication by Pi..
      ..ok, in 58 (pure 10.9) seconds (0.385 GFLOPS)
      ..md5 checksum = 9CA6E7B818FA046C3DAE722C35196729
    ..checking bd_sin()..
      ..ok, in 20 (pure 8.12) seconds (0.132 GFLOPS)
      ..md5 checksum = 9E39629C4577EEF4BDE30EE13047F9F9
    ..checking sin()..
      ..ok, in 44 (pure 31.9) seconds (0.0335 GFLOPS)
      ..md5 checksum = 4DE8EFC27CBB692E5E3DEB7A7E561EAB


.. малина-улита едет, когда-то будет...

Добавлено спустя 5 минут 15 секунд:
P.S. Вы чувствуете, какой ужас этот ваш синус? 0.03! 0.03, Карл!
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Пред.След.

Вернуться в Разработки на нашем сайте

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37

Рейтинг@Mail.ru