Коничива, уважаемый!

За время вашего отсутствия мы тут вон чего понаписали:

    17 Марта

    ... и ещё немного о Pebble. Собственно, с тех пор, как я полтора месяца назад выпустил пятое обновление своего циферблата, работы над ним завершились. Всё работает, всех устраивает, чего ещё ковыряться?

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

    Также пару недель назад наткнулся на этот материал. Воспроизвёл те шаги, что советовал автор и в итоге сейчас мой циферблат ежедневно скачивают более 150 раз, а общее количество загрузок составляет 2500. С тех пор, как началась реклама моего циферблата, я получил всего лишь два мэйла от пользователей, что меня очень радует. Отсутствие жалоб от населения - лучшая награда, сами понимаете. В первом из них было предложение, а во втором - жалоба, мол, погода не работает. Собственно не работала погода и у меня, так что я на 100% был уверен, что это неполадки со стороны сервиса openweathermap, от которого циферблат получает данные. Из-за поездки а Хаапсалу, проверить наверняка я смог это лишь в субботу вечером. И вот теперь представьте: я полный суши и пива захожу на сайт CloudPebble и мне выскакивает такое...

    Не делая резких движений, я дважды перечитал текст, а затем заполнил форму по ссылке. Слабо веруя в такую халяву, я пошёл искать информацию в интернете. Никаких официальных анонсов, только тема на reddit, созданная такими же счастливчиками, как я, и небольшая статья, написанная по этой теме. Как показывает обсуждение и мой собственный пример, часы скорее выдаются рандомно, а не за реальную активность. Чтож, спасибо больше компании Pebble за такую беспрецедентную акцию!

    Размышлял: Lentyay
    23 Января

    По просьбам трудящихся

    Циферблатные хроники. Как достаточно быстро выяснилось, предыдущая версия моего циферблата имела одну серьёзную недоработку: при полном отключении standby-экрана, погода обновлялась раз в секунду, что адски быстро сажало батарею телефона и "наедало" большой траффик. Сам тужился пару дней, но ничего нормально работающего не породил. В итоге решение нашёл tmnhy, за что ему огромное спасибо. Таким образом часы обновились до версии 1.03

    Получил пару просьб от пользователей, которые планирую реализовать на следующей неделе:

    • реализовать отображение температуры, как по Цельсию, так и по Фаренгейту
    • сделать версию циферблата на датском (переводы графики и страницы настроек уже подготовил, дело за малым)
    Размышлял: Lentyay
    20 Января

    Часовщик XXI века

    Расскажу, как обстоят дела с моим циферблатом для Pebble, которому я посвятил немало времени в последние три недели. Итак, с момента релиза (22 дня назад) он был скачан более 600 раз, сам циферблат я обновлял дважды и дважды страницу настроек. Кроме того, по итогам разработки я написал статью на Хабр, где в комментариях получил пару дельных советов.

    Теперь подробнее и с деталями. Первый же отзыв, полученный через пару часов после релиза сообщал мне, что... я перепутал AM и PM в 12-часовой версии. Я быстренько пофиксил это дело, выпустив версию 1.01. Потом было много разных экспериментов (например, использование графики с прозрачным фоном). Кроме того, мне порекомендовали статью по оптимизации из которой я использовал пару примеров. Как ни странно, код стал компактнее, но вот количество потребляемой памяти возросло, а не наоборот.

    Версия 1.02 была выпущена вчера. В ней полностью переработан механизм отключения standby-экрана. Собственно, в примере с которого я брал код на C, такой опции не было, там была возможность отключения автоматического возврата к standby-экрану. У себя же я изменил её описание на странице настроек, но не изменил суть. Вчера эта недоработка была исправлена.

    Теперь о странице настроек. С ней всё проще, так как я могу обновлять её в любой момент, независимо от циферблата. На момент релиза для корректного отображения погоды пользователю надо было где-то найти ID своего города openweathermap.org и ввести его в настройках. Мне самому эта система не нравилась, вдобавок пару раз пользователи меня спрашивали где им взять этот ID. Однозначно это надо было менять. Оптимальным вариантом мне показалось поле ввода, предлагающее варианты в зависимости от вводимого текста (как в поисковике Джуджла). Я попробовал несколько скриптов для этого и остановился на jQuery-Autocomplete. Понравилось, что он не тащит с собой ничего лишнего (как, например, популярный Select2). Также я поместил весь список городов в базу данных. Тут выяснилось два интересных момента: 1) в разных странах существовали города с одинаковыми названиями и 2) у некоторых городов (по всей видимости достаточно крупных) было по несколько ID, привязанных к разным координатам. Для решения первой проблемы надо было добавить обозначение страны. Максимально компактным и наглядным решением мне показались флаги перед названием города. Чтобы свести к минимуму количество запросов к серверу (количество которых и так возросло из-за динамического списка), я целенаправленно искал флаги-спрайты и нашёл отличный вариант. Единственное, что я изменил - это сжал изображение флагов через TinyPNG. Что из этого получилось, можно посмотреть здесь.

    Со второй проблемой было сложнее. Не хотелось отпугивать пользователей какими-то лишними опциями или координатами. В итоге я просто "отсёк" все лишние варианты через GROUP BY в SQL-запросе. Да, решение компромиссное и имеет свои минусы. Например, если в одной стране есть два города с одинаковым названием, то будет показан только один из них. Тем не менее, ничего лучше я пока не придумал.

    Планы на будущее? Ну с нынешним циферблатом уже мало чего можно сделать. Единственное, что ещё хочется реализовать - определение местоположения по GPS и поиск города исходя из этого. А ещё есть идея другого циферблата, гораздо более простого.

    Размышлял: Lentyay
    29 Декабря

    С почином, уважаемый!

    Вот и сдюжил я своё первое приложение-циферблат для Pebble. Да, какие-никакие циферблаты я делал и ранее, но там процент моего участия был сведён к минимуму. В данном же случае это вполне можно назвать полноценной разработкой. Началось всё с двух статей (первая и вторая), где подробно описывалось создание циферблата. Ещё ценнее было то, что к статьям прилагались исходники рабочего циферблата. Судя по статьям, ничего особо сложного в этом деле нет и я решил попробовать. Предварительно я связался с автором этих статей, человеком под ником tmnhy и предложил соавторство в новом проекте: мои идея и графика, его - код. Автор оказался человеком весьма коммуникабельным и согласился на моё предложение.

    Мне всегда нравились часы с переворачивающимися цифрами-пластинками, так популярные в Америке. Несколько лет назад я даже подумывал купить смартфон HTC только из-за того, что часы там были сделаны именно в таком стиле. Остановило лишь то, что адекватных телефонов у HTC тогда не было. В любом случае, именно такой циферблат я и хотел сделать.

    Всю разработку я вёл в специальном онлайн-сервисе от создателей часов, CloudPebble. Честно скажу, его функциональность не просто поразила меня, а прямо-таки приятно шокировала. Весь код пишется в редакторе с удобной подсветкой и автозаполнением. Вся графика добавляется через специальный менеджер ресурсов. Компилируется всё тоже в CloudPebble, при этом приложение мгновенно загружается в ваши часы - удобнее просто быть не может. Также можно скачать откомпилированный файл на компьютер или сделать скриншот циферблата. Насколько я понял, скриншот снимается реально на моих часах, а не на каком-то эмуляторе на сервере, так как если в последнюю секунду сменить на часах циферблат, то скриншот будет снят уже с него. Ещё одной приятностью CloudPebble является интеграция с GitHub, чем я тоже с радостью воспользовался.

    Львиную долю времени у меня заняло рисование графики. Первыми я, конечно же, нарисовал сами часы. Оформление календаря тоже родилось достаточно быстро. По мере отрисовки графики, я сразу же добавлял её в проект и располагал где надо. Достаточно неожиданно для меня, циферблат приобрёл лёгкий налёт стимпанковости. Индикаторы батареи и соединения Bluetooth я уже намеренно делал в этом стиле. Только оформление блока погоды мне никак не давалось. На какое-то время я оставил его и отвлёкся на веб-интерфейс для настройки циферблата. По сути, это обычная веб-страница, адрес которой прописан в настройках циферблата и которая принимает и отдаёт назад в циферблат какие-то переменные. Страничка не отняла много времени, так как никакой адаптивности и мультибраузерности тут не требовалось. В целях оптимизации я минифицировал весь CSS и JS и включил их в код страницы. Таким образом, единственный подключаемый файл на этой странице - это jQuery.

    Fight for the bytes!

    Закончив с этим, я вернулся к блоку погоды. Дизайн для него вроде как сложился, я дорисовал графику, добавил в проект и... случилось непредвиденное: я превысил лимит памяти на часах. Циферблат без ошибок компилировался и загружался в часы, где мгновенно "падал". Надо было урезать графику. Начал я с "экономии на спичках" и срезал "резьбу" у индикатора батареи. Сейчас вместо этой "резьбы" показан индикатор Bluetooth, у которого буква B вылезла за экран. Визуально разницы с предыдущим вариантом вообще нет. Дальше было самое трудоёмкое - центральный блок с датой и секундами. Я убрал фоновую картинку с кругом и нарисовал его программно. Тут выяснился один нюанс: для рисовки круга задаются координаты центра и радиус, таким образом, его размер в пикселях всегда будет нечётным и расположить его строго по центру невозможно. Пришлось немного попередвигать всё остальное, так как старый круг имел чётный размер. По той же причине индикатор секунд уже не вписывался в круг и его тоже надо было перерисовывать. А это 60 спрайтов, если что... Впрочем, если уж перерисовывать, то нужно выжать из этого по максимуму. В итоге, всё, что реально не меняется в индикаторе секунд я перенёс на фоновую картинку, что позволило заметно уменьшить разрешение спрайта. Умножаем на 60 и получается существенная экономия, которая, в конечном итоге, и позволила мне вписаться в байтовый бюджет.

    Последняя проблема, которую мне пришлось решить - название города в блоке погоды. Дело в том, что туда помещалось только не очень длинное название, а что делать с длинным? Поигравшись со шрифтами я понял, что это не выход. В итоге выкрутился так: если название города достаточно короткое, показывается оно и температура, если длинное - только температура.

    Короче, циферблат готов и опубликован:

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

    Также у меня есть некоторые планы на будущее. Например, сейчас не очень удобно реализована настройка погоды: надо в интернете посмотреть ID своего города openweathermap.org и ввести его в поле в настройках. Не очень удобно. Есть официальный список, но там 74 тысячи городов. Засовывать их все в выпадающее меню - не вариант. Короче, надо думать... Ещё хотелось бы сделать возможность отображения календаря вместо погоды. Словом - громадьё моё.

    Размышлял: Lentyay
    1 Октября

    ... теперь ещё и фитнес-трекер!

    Всего 2 недели прошло с момента выхода предыдущей прошивки Pebble, как подоспела новая. На этот раз часы получили функционал фитнес-трекера, для чего выпущены 3 специальных приложения, связанных с сервисами Jawbone, Misfit, Swim.com. Не сомневаюсь, что позднее список расширится. Также появилась удобная функция быстрого запуска приложений (по долгому нажатию).

    Кроме того, производители часов снизили цену на Pebble. Скорее всего, это было сделано ради повышения конкурентоспособности с Motorola 360 и Apple Watch. Хотя последние, на мой взгляд, совершенно тут не конкуренты: в этих дорогущих часах нет ничего интересного и инновационного. Тем не менее, новое ценообразование Pebble поставило меня в тупик: $99 или €129 или £99 за пластиковую версию и $199 или €229 или £179 за Pebble Steel. С каких таких, цены в евро и фунтах почти вдвое дороже???

    И последнее: в прошлый раз я шутил, каких ещё датчиков напихано в этих часах. Ответ нашёл тогда сразу же: только 3-осевой акселерометр и компас. То есть все датчики уже "разблокированы" для программистов и ничего нового не будет. Что же, чем богаты, тем и рады.

    Размышлял: Lentyay