И вот это замечательный инструмент понадобился мне для разметки места под полки. Порывшись в ящиках и не найдя там уровня я вспомнил, что скорее всего я его оставил в городе и вешать полки придется «на глаз». Или «на айфон»?!
Конечно, ведь во многих смартфонах сейчас есть акселерометры и данный продукт яблочной компании в их числе. А если есть акселерометр, значит можно измерить ускорение свободного падения, вектор которого направлен строго перпендикулярно линии горизонта. Измерять абсолютную величину УСП для определения угла к горизонту, конечно, смысла нет. Но, к счастью, акселерометры измеряют не абсолютное значение, а его проекцию на одну из своих осей. Поэтому их обычно устанавливают в количестве трех штук – по одному на каждую ось нашего трехмерного (и на том спасибо) пространства. Так что в состоянии покоя показания акселерометра – значение проекции ускорения свободного падения, которое, соответственно, будет изменяться при наклоне датчика (в общем случае). Значит, техническая возможность измерить угол относительно горизонта есть. А как с реализацией?
Запускаю App Store, набираю «spirit level». Ага, да их тут пруд пруди! Однако, после установки десятка приложений стало ясно – там есть что улучшить. Почему-то, чтобы мерять вертикальные углы разработчики добавляли вторые колбы и шкалы каких-то неведомых приборов, калибровка у 90% приложений сводилась к “положите на эталонную поверхность и нажмите кнопку” – как и где я найду эталонную поверхность, если у меня нет уровня?! Где-то не отключался звук, где-то в самый ответственный момент гас экран, каким-то инструментом можно было измерить паралакс, в какой-то был встроен вероятор событийного потока. Но так, чтобы просто ровно полку повесить – нашлось всего пару приложений.
На тот момент у меня был перерыв в основном проекте и задача реализовать точный, удобный инструмент показалась мне интересной. Тем более, что я иногда пишу софт для пром. автоматики и пройти мимо возможности поработать с гироскопами и акселераторами я не смог.
В общем, в ожидании апрува основного проекта я взялся за Pocket Level. Удивительно, но среди iLevel-ов 3D и прочих Spirit Bubble Level было не занято такое подходящее название. На всякий случай, я решил посмотреть, не продается ли по такому случаю pocketlevel.com, а он свободен! Раз так – надо брать! И я взялся за работу, сформулировав перед этим основные требования к будущему приложению:
1. Максимально возможная на данном оборудовании точность измерений.
2. Измерение углов в любых положениях (горизонтально, вертикально и, скажем так, плашмя)
3. Максимально приближенный к реальности интерфейс – можно просто число вывести, но наглядность классического уровня очень упростит работу с приложением.
4. Сохранить наглядность при измерении любых углов, а не только углов в 0/90/180 градусов.
5. Звуковая индикация приближения к нулю.
6. Инструмент должен хорошо лежать в руке, никаких лишних переключателей.
Не стану углубляться в пучину кода, по этой части проблем и неразрешимых препятствий не было. Да и ноу-хау как таковых не пришлось выдумывать. Основная нагрузка пришлась на интерфейсные работы. На исходе третьей недели, продолжая ломать голову над компоновкой элементов управления, я очень хорошо понимал разработчиков, которые «тупо» воткнули три колбы и, как говорится, не парились. Я же принципиально не хотел городить ничего сверх одной колбы и как-либо переключать вид – инструмент должен быть монолитным.
Решение с вращающейся колбой показалось мне очень удачным. А металлический дизайн окончательно расставил все по своим местам. Осталось реализовать модуль калибровки. Надо сказать, что погрешность на четырех, доступных мне устройствах, составляла от 0,3% до 0,8%. Применительно к задаче это 1-2 см/м! Так что без калибровки уровень из iPhone довольно кривой. Пришлось вспоминать, как звали учителя математики и прочую тригонометрию. Я даже взял определитель матрицы 4х4! Не с первого раза, конечно… Чтобы убедится, что алгоритм калибровки интуитивно понятен, были проведены опыты над котом и другими членами семьи. Кот, кстати, единственный кто все понял и вообще не задавал вопросов.
И мне кажется, что получилось хорошо. По крайней мере, я уверен, что полностью реализовал возможности приложения. Один из тех редких случаев в моей практике, когда не хочется ни улучшить, ни добавить.
Цена: $0.99 [iTunes link]
Конкурс
У нас имеется 25 промо-кодов.
Докажи, что ты айМаньяк и у тебя дома есть ящик с инструментами. Пришли свое фото на [email protected].
Самым креативным мы вышлем код на бесплатное скачивание этой замечательной программы. Итоги подведем в 23:00 сегодня. Время есть, уважаемые столяры, маляры и плиточники 80 уровня.
Победители
Было прислано много фотографий инструментов. Однако в задании было сказано «Докажи, что ты айМаньяк», а не робот, управляемый механизм или дух Шекспира. Пока что только на одной фотографии имеется изображение живого человека в окружении инструментов и гаджетов.
Андрей Клыгин
Unknown получает код за креатив
Конкурс продолжается. Я надеюсь, что у любителей хозяйства креатива хватит на большее, чем просто сфотографировать ящик с плоскогубцами и отвертками…
Данная история опубликована в рамках рубрики Developer Story, где разработчики делятся секретами своей внутренней кухни.
Источник: