?

Log in

No account? Create an account

Badula

Previous Entry Share Next Entry
01:35 pm: Интересное шапито получается. Один и тот же подсчёт на galaxy s3 занимает тринадцать секунд, а на сраненькой нокии 810 - меньше секунды. Один на Джаве, другой на C#, что никакой роли играть не должно, потому что там голимая тригонометрия. Как объяснить двадцатикратную разницу в прямолинейном счёте я пока сообразить не могу. Синусы да арктангенсы по моему разумению вычисляются одинаково. Или это чудит JVM с подключенным отладчиком? Сухой осадок какой-то не очень приятный.

Android Studio не умеет NDK, в свете двадцатикратной разницы в ураганности, это тоже тормоз на пути к светлому будущему.



Comments

[User Picture]
From:fatoff
Date:February 25th, 2014 11:41 pm (UTC)
(Link)
Неужто критичное такое время, что, очень много на клиенте считать? Чем ты мучил Андроид 13 секунд подряд?

И таки да, профессиональные организации если не в недоделанной на сейчас Android Studio по в Eclipse с плаг-ином под Android только Java отлаживали. Cross-platform layer у них компилировался и линковался в .apk но сам по себе. Его более всего любили писать в xCode с любой функцией main.

Edited at 2014-02-25 11:47 pm (UTC)
[User Picture]
From:badula
Date:February 26th, 2014 12:03 am (UTC)
(Link)
Считать довольно много. Нужно вычислять расстояние и направление на кучу движущихся объектов. Геометрия не евклидная, расчёт получается довольно объёмный. Андроид пока может обсчитать около пяти тысяч объектов в секунду, а нокия - сто с лишним тысяч. Считать нужно довольно часто - как только компас докладывает смену направления на градус или GPS докладывает о перемещении на пару метров, нужно пересчитать всё. Плюс, нужно пять-десять раз в секунду пересчитать движение всех участников.
В не привязанных к местности игрушечках всё просто — квадратного корня достаточно чтобы всё высчитать, а тут настоящий земной эллипсоид в натуральную величину.
Оно конечно не смертельно, в зоне видимости вряд ли будет больше пяти целей, но разница в двадцать раз напрягает. Где-то я не прав, но не могу понять где.
В еклипсе native code отлаживается на ура. Переходы между Джавой и native'ом — нет, но это — отдельная история, погоды не делающая, очень уж разные отладчики. Visual Studio тоже на телефоне не запрыгивает в WinRT component DLL'ины, но хоть останавливается если туда вставить breakpoint.

Ещё одна проблема — как запретить посторонним клиентам сосать кровь из сервера? Никакое надёжное решение в голову не приходит. Ничего же в программе не утаишь.
[User Picture]
From:fatoff
Date:February 26th, 2014 12:10 am (UTC)
(Link)
Oh, похоже три года не бесследно для андроидной плаг-ина в Эклипсе прошли. Кстати: http://developer.android.com/reference/android/app/NativeActivity.html Может, это и есть решение?

Второе решение в Push-to-talk? C2DM?
http://android-developers.blogspot.com/2010/05/android-cloud-to-device-messaging.html

Edited at 2014-02-26 12:17 am (UTC)
[User Picture]
From:badula
Date:February 26th, 2014 01:02 am (UTC)
(Link)
Я смотрел и на то и на другое - оба совсем не то что нужно. Native activity это хреновина которая напрямую пендючит пикселы в окно, а нотификации полезны если облако о чём-то постоянно думает и иногда хочет донести свои мысли. У меня таких нужд нет. UI будет простецкий, из готовых заготовок, а к серверу всегда придётся ходить с какими-то просьбами. Может и наплевать, если кому делать нечего, пусть пишет своего клиента. Хочется предотвратить cheating, потому что какие-то выигранные достижения нужно будет отдавать заменителем денег и нельзя допустить чтобы у всех было этого заменителя сколько угодно просто потому что какой-то китайский хакер написал программку которая без погони производит сразу поимку мишени.
[User Picture]
From:fatoff
Date:February 26th, 2014 01:16 am (UTC)
(Link)
Первое, помимо ненужной быстрой графики также даст возможность писать на C++ и не думать про JNI. Надеюсь, сам не пробовал. И будет Андроид быстро считать, можно, по идее ему одну активити так независимо сделать и далее дружить её с любыми другими активитями.

Второе, это если в лоб, никак не поможет. А запретить посторониим клиентам сосать, то может, и к месту. Там, кмк, присутствует аутенфикация на базе токена, выдаваемого сервером для заведённого андроидного эккаунта, вне сессии игры эккаунт, отвалите.
[User Picture]
From:badula
Date:February 26th, 2014 02:45 am (UTC)
(Link)
Про аутентикацию я немного другую проблему решаю - нужно как-то запретить приходить из чуждых приложений. Кто угодно может получить настоящий токен для произвольного гуглоекаунта. А ведь программа может прийти не только из гуголплея, но и из амазонного стора, из эпла и из нашего родного виндовс стора. Какой секрет можно в апп спрятать да так чтобы его можно было незаметно поменять - ума не приложу. Нужно почитать труды знатоков.
[User Picture]
From:fatoff
Date:February 26th, 2014 04:36 am (UTC)
(Link)
Кто угодно может получить настоящий токен для произвольного гуглоекаунта.

В двух словах, к сессии игры на сервере можно привязть некоторое количество валидных токенов. В одной компании использовали те токены как-то для разных девайсов, подробности не помню, но для не гугловских эккаунтов генерили свои токены. Но они начали именно с этим механизмом, им был очень удобен push с сервера.
[User Picture]
From:badula
Date:February 26th, 2014 09:42 pm (UTC)
(Link)
С тормозами прояснилось. Отладчик вытормаживает машину в десять раз. Остальные два — врождённая разница с которой можно жить.
Токены на сервере не помогают против нечестного потребителя, который пишет своего клиента к вебвервису, честно получает токен но вместо того чтобы бегать по лесу сразу автоматически производит поимку цели.
[User Picture]
From:fatoff
Date:February 26th, 2014 09:47 pm (UTC)
(Link)
Это так, токены так просто не помогут, если без своего сервера, который дополнительно матчит токен каждого клиента при запросе от него с набором валидный "авторизованных" токенов. Эту логику надо спрятать подальше от хакеров. И вообще, с пушем можно много чего придумать, как регулярные апдейты состояния монстров, для примера. Ну нечего клиенту слишком часто бесполезно посылать сервер.
[User Picture]
From:badula
Date:February 26th, 2014 09:59 pm (UTC)
(Link)
Токены не помогают в принципе, если кто угодно может их получить. Токен это же просто последствия проверки знания клиентом какого-то секрета. Мне нужно ещё выяснить природу клиента и отказывать пришедшему роботу даже если он знает пароль. Потому что должен прийти человек. Эту проблему я не знаю как решить. Спрятать какой-то дополнительный секрет в коде программы очень трудно. Настойчивый китаец сломает всё и прикинется человеком. Может у скайп people спросить как они отсекают чужих клиентов…
[User Picture]
From:fatoff
Date:February 26th, 2014 10:04 pm (UTC)
(Link)
Ну на вскидку, передаём на сервер токен побайтно заксореный CRC32 от содержимого предыдущего запроса клиента на сервер, в котором есть некий аппаратно-зависимый guid для неповторимости. Предпринимаем минимальные усилия против дизассемблирования бинарника нашего аппа. Уже дольше ломать и вникать.
[User Picture]
From:badula
Date:February 26th, 2014 10:38 pm (UTC)
(Link)
Предыдущие запросы тоже не помогут. Нужно что-то что знает только апп, что апп не может выдумать сам и про что сервер может проверить что апп это получил честным путем. Но что-то ничто в голову не приходит. iOS апп знает уникальный номер себя в магазине, но это любой хакер может из аппа вынуть...
Скорее всего придётся на эту проблему плюнуть, отправлять запросы через шифрованный транспорт и пусть харкают если им больше нечем себя занять.
[User Picture]
From:rraccoon
Date:February 28th, 2014 07:23 pm (UTC)
(Link)
А RenderScript не поможет ускорить подсчеты на Андроиде?
[User Picture]
From:badula
Date:March 1st, 2014 06:32 am (UTC)
(Link)
после того как выяснилось что виноват дебагер проблема отпала. всё можно обсчитать и на джаве. и хрен с ним что считать придётся отдельно на трёх языках. пугает количество новых языков, подъязыков, скриптов и прочей пое_ени которую легко нарожать имея тридцать тысяч работников. постигнуть одним мозгом отрыжку тридцати тысяч невозможно.
Powered by LiveJournal.com