Pull to refresh
9
0
Гриша @grishao

User

Send message
Нет, просто отмечает строку, что программа туда зашла, а на самом деле захода не было.
В PHPUnit есть известный bug с покрытием таких конструкций:
$var = false;
if($var == true)
    return false;
if($var == true) return false;

If в данном случае не отработает, однако Xdebug считает его покрытым. Как выход можно заключить операторы после if в фигурные скобки:
$var = false;
if($var == true) {
    return false;
}
if($var == true) { return false; }

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

Вопрос вот в чем, как в badoo справляетесь с этой проблемой, если ваш форматтер как раз убирает фигурные скобки?
В PHPUnit есть известный bug с покрытием таких конструкций:
$var = false;
if($var == true)
    return false;
if($var == true) return false;

If в данном случае не отработает, однако Xdebug считает его покрытым. Как выход можно заключить операторы после if в фигурные скобки:
$var = false;
if($var == true) {
    return false;
}
if($var == true) { return false; }

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

Вопрос вот в чем, как в badoo справляетесь с этой проблемой?
Дают деньги, а забирают что? Можно подробнее по этому вопросу.
xOffsetNormalized имеет диапазон от 0 до 0.5, и равен Math.abs(xOffset — 0.5f), то есть мы приводим диапазон движений от 0 до 1 к диапазону от 0 до 0.5, но без информации в какую сторону от середины (от позиции 0.5) мы двигаемся.

Дальше работает наша функция пружины, которая не важно по какому методу посчитана (результат то один и тот же). И потом мы восстанавливаем информацию о направлении движения с помощью конструкций

if(xOffset < 0.5f)
xOffset = 0.5f — xOffsetNormalized;
else
xOffset = 0.5f + xOffsetNormalized;

Таким образом, мы применяем нашу пружину к нормализованному значению входного параметра, и на обоих концах входного параметра пружина работает одинаково (то есть от 0 до 0.2 и от 0.8 до 1).

Математически мы просто «отзеркалили» функцию нормализованного значения относительно осей XY. Получив в итоге S образную функцию от 0 до 1, которая имеет линейный вид в диапазоне от 0.2 до 0.8 и «загнутый» (пораболлический) на краях.
На самом деле все происходило визуально, нарисовал пораболу, нашел визуально, какой участок меня интересует и потом методом тыка пробовал подбирать коэффиенты, которые «установили» бы этот участок в нужный мне диапазон за основу брал формулу y=a + b*(c*x +d)^2, и потом методом подбора коэффициентов нашел искомые мне значения. Если честно уже смутно помню, как именно дошел до результата.

Правильный способ взять за основу формулу y=a*x^2+b*x+c (взято отсюда http://bit.ly/WNJr58) найти производную равную 2*a*x+b. Принять, что производная в 0 равна 1, а в точке максимального сжатия S равна 0, и так же сама функция пораболы равна 0 в точке 0. Итого получаем систему из трех уравнений:
b=1
2aS+b=0
c=0
Откуда легко выражает формулу «пружины» y = (-1/(2S)) * x^2 + x, где S это springZone. (http://bit.ly/W08LWm — график по новому методу, ничем не отличается от изначального).

Вывод: надо было хорошо учить математику, и не идти сразу «визуальным» способом, а найти решение за 5 минут чисто математически. Хотя с другой стороны (оправдывая себя :) система образования могла быть построена на более прикладном уровне и сразу рассказывать, для чего и где мы можем использовать пораболы, гиперболы, производные, апроксимацию и прочие полезные вещи.
Я же говорю, формула выводилась в муках :). Если воспользоваться сервисом bit.ly/TQWFkI в нем, можно увидеть, что это перевернутая порабола. Но естественно не вся порабола используется в качестве рабочего участка, а только от 0 до 0.2.

В частном случае я взял springZone равным 0.2, так как у нас 5 рабочих столов (всю шкалу изменений от 0 до 1 делим на 5 получаем 0.2). График интересующего нас участка: bit.ly/Uduona. В итоге мы получили функцию, производная которой равна 1 в 0, и производная равна 0 в 0.2 (то есть в конце springZone, «пружина» сжата до максимума).

По поводу коэффициентов получившейся формулы я сейчас не могу точно сказать какой из них за что отвечает (напр. за сдвиги и сжатия/расширения), у меня по математике была 4, и это было 6 лет назад, не помню я уже, подбирал полуэкспиремнтально и с листочком бумаги, который к сожалению потерялся. Но при желании можно легко разобраться исходя из начальной y = x^2 и в общем виде введя коэффициенты y = a + b*(x*c + d)^2, с помощью вышеуказанного сервиса увидеть, какой из коэфициентов за что отвечает и сгенерировать нужные для своей цели.
Ох, spring formula была выведена в муках и воспоминаниях основ высшей математики. По сути она переводит координаты реального смещения экрана (пальцем) в координаты смещения фона с учетом функции пружины.

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

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

В методе NormalizePosition происходит как раз это сопряжение и переключение с линейной функции на пораболическую в точке начала действия пружины stringZone, которая в свою очередь начинается на последнем виртуальном скрине. А жесткая формула, которая была там указана, это формула перевернутой пораболы, которая сдвинута по осям x y и сжата по y так, чтобы соответствовать вышеуказанным ограничениям.

Таким образом, мы получаем гладкую S образную функцию на промежутке входных значений от 0 до 1.

Ух, наверное ничего не понятно, но это был один из самых сложных участков реализации. Еще есть формула инерции f(x) = ax^3 + bx^2 + cx + d, которая по сути является аппроксимирующей функцией третьего порядка нашего движения, которую мы «подстраиваем» под скорость движения нашего пальца в момент отрыва от экрана, а дальше начиная с этой скорости функция автоматом вычисляет положение экрана плавно сводя эту скорость к нулю.

Если что-то не понятно задавайте вопросы попробую прояснить :)
Я думал над этим, но вот что то идеи, как можно изобразить на картинке параллакс эффект, который является анимацией, не нашел. Если у вас есть конкретные примеры, с удовольствием добавлю.
Тема стандартная HTC, dropbox идет предустановленным, но я, если честно, им не пользуюсь. Часы и верхняя панель тоже все стандартное.
Добавил видео. Если что-то не так сильно не ругайте, это мое первое видео.
Да, видео завтра обязательно добавлю, сегодня уже глаза закрываются.
Являюсь владельцем 900x4c и у меня есть траблы с ним.

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

Во-вторых звук — просто жесть, я понимаю, что ноут не для этого предназначен, но до этого у меня был Thinkpad T61 и там слушать музыку было приятно, а тут тошно. Более того, когда одеваешь нормальные наушники слышен фон от питателя, отключаешь зарядку, фон пропадает, но это опять же не дело для ноута за 50к.

В-третьих клава — опять же после T61 это просто жесть, наощупь F клавиши отделить невозможно, PgDn, PgUp, Home, End, Delete тоже размещены не супер удобно, одно только радует в Mac буках еще хуже с клавой. Тачпад удобен, но прокрутка двумя пальцами работает как то кривовато, хотя фича очень полезная.

Дальше по настройкам яркости и звука — слишком большой шаг, получается или слишком ярко/громко или слишком темно/тихо, если звук еще можно вручную «подогнать», то яркость никак, опять же сравниваю с ThinkPad, там шаги как минимум в два раза чаще.

Но при этом скорость работы конечно впечатляет SSD +8Gb памяти делают свое дело, я сам и программирую и фотошоплю и в браузере у меня минимум 20 вкладок открыто и все это не тормозит ни разу — ради этого и покупал — экономить свое время.

В итоге сейчас уже присматриваюсь к другим производителям и моделям. Thinkpad китайцы изуродовали до невозможности покупки, да и «быстрой конфы» там нет. Apple для программиста не очень то подходит, нужна все-таки винда, остается пощупать Sony и Asus этот, правда цена на них в полтора раза выше, чем на мой Samsung.
А финансовые результаты есть?

Мы (я программист и моя девушка дизайнер) просто сделали обои под НГ для Android заработали около 600$ за месяц не вкладывая ни копейки в продвижение. Но поняли, что программировать рисовать и продвигать(если серьезно) вдвоем очень сложно. Поэтому решили найти программистов, но что-то на фрилансе очень сложно найти толковых OpenGL спецов, которые учтут все нюансы мобильной разработки. Отсюда у меня к вам предложение, объединить силы, если интересно конечно?
Я искал под Apple возможность делать анимированные обои, но выяснилось, что это возможно только для жейл-брекнутых девайсов. Может у вас другая инфа по этому поводу — тогда с удовольствием сделал бы для Apple. А так мы попробовали статические и анимированные под Android, статика вообще не пошла, а вот анимированные покупают.

Думаю статика под Apple тоже будет не слишком восстребованным, сейчас все больше и больше становится бесплатных сборников, которые оттягивают пользователей.
Разработка стоила 15-20 тыс. долларов, а по времени 7-10 месяцев?

К сожалению, основной массе не нужны «полезные» приложения. Им нужны развлечения. Игры, картинки, музыка, кино, общение. Я вот попробовал сделать живые обои под Android и получаю те же 20-30 закачек ежедневно без платного продвижения. При этом разработка стоила на порядок ниже и быстрее, чем у вас.
В метро скоро будут как глухонемые перед своими планшетами и смартфонами махать.
Приходишь домой, а у тебя кот дохлый и надпись на мониторе «game over».
В моем частном случае этот код работает в составе CMS, в которой все делается максимально модульно и гибко. И в дальнейшем при замене в каких то определенных случаях самой БД, например, на Nosql или любую другую, проблем по адаптации будет намного меньше, по этому лично для этого проекта он подходит больше. Ваш вариант тоже очень интересный, так как тут помимо скорости можно выйграть в более простой реализации. Если кто-то захочет воспользоваться данными методами у него всегда будет выбор.

Абсолютно согласен и с тем, что максимум надо делать в SQL, особенно когда application работает на скриптовых языках, которые по определению в десятки раз медленнее, плюс экономия на коммуникациях с базой.
1

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity