Согласен, что-то подобное там и произошло. Это же обычная проверка на включен/выключен, выдавать наружу фатальное исключение при этом — странная практика.
Как инженеры сони могли пропустить такой баг — это вопрос интересный.
Насколько я понимаю, может ошибаюсь, любое обновление прошивки от вендоров, после тестирования инженерами вендора на различных устройствах, попадает к операторам, которые тестируют обновление в своих сетях и если после этого всех все устраиват, то обновление выкатывается. Ну т.е. кто виноват не понятно. Возможно это также одна из причин, почему не стоит ожидать фиксов через неделю.
Здесь все не так просто.
READ_PRIVILEGED_PHONE_STATE это не обычный пермишен, а привилегированный. Он создан с пометкой "signature" в уровне безопасности. Дословно это означает следующее:
A permission that the system grants only if the requesting application is signed with the same certificate as the application that declared the permission. If the certificates match, the system automatically grants the permission without notifying the user or asking for the user's explicit approval.
Т.е. приложение Contacts от сони должно быть подписанно тем же ключок что и прошивка. Тогда необходимые разрешения автоматически гарантируются и никаких запросов в рантайме не будет. В противном случае, независимо от манифеста, при запросе выкинется SecurityException.
Если проблема действительно в манифесте, хотя это может быть и не так, то никакие исправленные версии не помогут.
Кстати, я посмотрел исходный код службы. В большенстве запросов, там где необходимы привилегированные пермишены, SecurityException перехватывается и логируется, а при проверке доступности видео звонков — почему-то нет.
отсутствие правильного процесса управления разработкой ПО
Sony полностью развалены процессы разработки и поддержки ПО
эти ребята не знают как писать софт и как его поддерживать
Не покупайте телефоны Sony
Ваше разочарование понятно, вы заплатили большие деньги и не получили ожидаемого качества. С другой стороны, справедливости ради, замечу, что наличие этой ошибки недостаточно, чтобы делать подобные выводы, на мой взгляд. Тем более призывать людей не покупать устройствами, хотябы потому, что описанная вами проблема не очень актуальна (в россии).
Пример перегрузки операторов работы с указателями и членами класса [], (), , &, ->, ->
int Vector3::operator [] (int n)
{
try
{
...
throw "Ошибка: Выход за пределы размерности вектора";
}
catch (char *str)
{
..
}
return 0;
}
В данном случае, исключение не перехватится. Должно быть
try
{
...
throw "Ошибка: Выход за пределы размерности вектора";
}
catch (const char *str)
{
..
}
Также следует отметить, что оператор [], (), ->, могут быть только членами класса
Ну и в целом, если вы решили воспользоваться механизмом перегрузки операторов, то семантика поведания должна быть ожидаема. В противном случае, лучше использовать обычные функции/методы: add, sub, assign, ...
По поводу записи типа
Vector3(this->x++, this->y++, this->z++)
Это не очень удачный вариант и привыкать к такой записи не стоит (особенно для тех кто только начинает). Дело в том, что порядок вычисления агрументов не определен (это не оператор запятая) и если, вдруг, в классе появиться зависимость между полями, то программа также будет вести себя неопределеным образом.
К сожелению, клиент под Android еще в процессе. В скором времени постараюсь выложить. Все примеры можно будет собирать в Android Studio и запускать на устройстве или на симуляторе.
Десктопных клиентов пока не планирую. Можно использовать Qt, вроде как она по умолчанию работает в режиме совместимости с OpenGL ES (что бы шейдеры не переписовать). Или воспользоваться каким-либо эмулятором, например, этим
OpenGL обрабатывает текстуры формата GL_RGBA8 с помощью того, что называется Normalized integer. Т.е. на самом деле у нас есть только целые числа, которые OpenGL автоматически преобразует в числа с плавающей точкой и обратно. Такие числа характеризуются наличием знака и количеством бит (bitdepth). В нашем случае, это 8-ми битные, беззнаковые целые.
Максимальное значение:
MAX = 2^8 - 1
OpenGL преобразования:
float = int / MAX
int = round(float * MAX).
Суть распаковки/запаковки
Запаковка:
Мы умножаем наше число F от 0.0 до 1.0 на 255.0. Из полученного результата нам важен остаток B. Это то, что не влезло в 8 бит. Т.е. в один 8-ми битный компонент мы можем записать только F — B / 255.0.
На втором шаге мы просто сохраняем (B, F — B / 255.0)
Распаковка:
Складываем две компоненты, не забыв разделить первую на 255.0.
На мой взгляд, проблема вреда обоев для батареи немного «раздута». Во-первых, у живых обоев (у движка) есть состояние hidden, т.е. обои активны, но их невидно. В этом состояние нужно прекращать всякую активность: остановить вычисления, отвязаться от сенсоров и т.д… Исходя из того, как мы пользуемся телефонами и планшетами, период видимости обоев достаточно небольшой. Во-вторых, конечно необходимо разумное ограничение fps. Если следить, как минимум, за этими вещами, проблем быть не должно.
К сожелению, про значительные изменения сказать ничего не могу. Единственным нововведением, которым я воспользовался, был интент смены обоев ACTION_CHANGE_LIVE_WALLPAPER (он появился только в 16 api).
Кстати про батарею, мне в одном из отзывов предложили сделать модификацию, чтобы уровень жидкости коррелировал с зарядом батареи, а на зарядке там пузырики чтобы были. Не знаю как делать, но мне показалось интересным. Приложение которое «жрёт» батарию и показывает пользователю как быстро оно это делает.
Мне кажется смешиваются.
Вот так эта сцена выглядит, отрендериная blender'ом
Получается немного светлее, у него объемы больше при расчетах
Согласен, что-то подобное там и произошло. Это же обычная проверка на включен/выключен, выдавать наружу фатальное исключение при этом — странная практика.
Насколько я понимаю, может ошибаюсь, любое обновление прошивки от вендоров, после тестирования инженерами вендора на различных устройствах, попадает к операторам, которые тестируют обновление в своих сетях и если после этого всех все устраиват, то обновление выкатывается. Ну т.е. кто виноват не понятно. Возможно это также одна из причин, почему не стоит ожидать фиксов через неделю.
Здесь все не так просто.
READ_PRIVILEGED_PHONE_STATE это не обычный пермишен, а привилегированный. Он создан с пометкой "signature" в уровне безопасности. Дословно это означает следующее:
Т.е. приложение Contacts от сони должно быть подписанно тем же ключок что и прошивка. Тогда необходимые разрешения автоматически гарантируются и никаких запросов в рантайме не будет. В противном случае, независимо от манифеста, при запросе выкинется SecurityException.
Если проблема действительно в манифесте, хотя это может быть и не так, то никакие исправленные версии не помогут.
Кстати, я посмотрел исходный код службы. В большенстве запросов, там где необходимы привилегированные пермишены, SecurityException перехватывается и логируется, а при проверке доступности видео звонков — почему-то нет.
Ваше разочарование понятно, вы заплатили большие деньги и не получили ожидаемого качества. С другой стороны, справедливости ради, замечу, что наличие этой ошибки недостаточно, чтобы делать подобные выводы, на мой взгляд. Тем более призывать людей не покупать устройствами, хотябы потому, что описанная вами проблема не очень актуальна (в россии).
Я призываю вас внимательней отнестить к тому коду, который вы пишете
Нет. Более правильным будет такой код
Нет. Должно быть так
Нет. Должно быть так
Почему тип возвращаемого результата const bool, a не bool?
Здесь следует отметить, что операторы && и || оболадают сементикой logical short-circuiting. И при перегрузке это свойство теряется.
Почему тип возвращаемого результата const Vector3, а не Vector3?
Выглядит стронно, относительно объекта s.
В данном случае, исключение не перехватится. Должно быть
Также следует отметить, что оператор [], (), ->, могут быть только членами класса
Ну и в целом, если вы решили воспользоваться механизмом перегрузки операторов, то семантика поведания должна быть ожидаема. В противном случае, лучше использовать обычные функции/методы: add, sub, assign, ...
По поводу записи типа
Это не очень удачный вариант и привыкать к такой записи не стоит (особенно для тех кто только начинает). Дело в том, что порядок вычисления агрументов не определен (это не оператор запятая) и если, вдруг, в классе появиться зависимость между полями, то программа также будет вести себя неопределеным образом.
Нет. Вы пытаетесь присвоить значение константному объекту.
Вот это тоже не очень удачно
Мне кажется использовать лексику типа
в публикации неуместно. Давайте будем хоть немного уважать друг друга.
Выложил клиент под Android.
Cобираю на Ubuntu 16.04, на Windows не пробовал. Если попробуете и что-то не заработает, напишите пожалуйта.
К сожелению, клиент под Android еще в процессе. В скором времени постараюсь выложить. Все примеры можно будет собирать в Android Studio и запускать на устройстве или на симуляторе.
Десктопных клиентов пока не планирую. Можно использовать Qt, вроде как она по умолчанию работает в режиме совместимости с OpenGL ES (что бы шейдеры не переписовать). Или воспользоваться каким-либо эмулятором, например, этим
Тестовый девайс у меня всего один: xperia z3
Описанный пример с 2^20 частиц работает на ~30fps. Без красивостей в постобработки ~42fps.
На hdr-текстурах результат примерно на 5 fps хуже.
Утверждать ничего не буду, попробывал всего один раз и возможно где-то просто ошибся.
OpenGL обрабатывает текстуры формата GL_RGBA8 с помощью того, что называется Normalized integer. Т.е. на самом деле у нас есть только целые числа, которые OpenGL автоматически преобразует в числа с плавающей точкой и обратно. Такие числа характеризуются наличием знака и количеством бит (bitdepth). В нашем случае, это 8-ми битные, беззнаковые целые.
Максимальное значение:
OpenGL преобразования:
Суть распаковки/запаковки
Запаковка:
Распаковка:
К сожелению, про значительные изменения сказать ничего не могу. Единственным нововведением, которым я воспользовался, был интент смены обоев ACTION_CHANGE_LIVE_WALLPAPER (он появился только в 16 api).
Кстати про батарею, мне в одном из отзывов предложили сделать модификацию, чтобы уровень жидкости коррелировал с зарядом батареи, а на зарядке там пузырики чтобы были. Не знаю как делать, но мне показалось интересным. Приложение которое «жрёт» батарию и показывает пользователю как быстро оно это делает.