pátek 22. ledna 2016

Jak se vyrábí aplikace na chytré hodinky Pebble Time Round


Když se v dubnu 2012 na Kickstarteru objevily hodinky Pebble s e-ink displayem, za měsíc získaly částku přesahující deset milionů dolarů. Na jaře 2013 jste si o ně s námi mohli zasoutěžit.

Dnes si ukážeme, jak se pro Pebble vyvíjí. Nebude to sice vítězný Připomínač léků, ale částečně se přiblížíme jednomu z finalistů, Navigaci na zápěstí.

Místo původního soutěžního modelu se podíváme na nejnovější kousek, Pebble Time Round, který se poměrně v tichosti objevil v září letošního roku. Co nabízí? 64barevný kulatý e-ink display, integraci s Androidem i iOS, při váze necelých 30 gramů výdrž pohodově přesahující 50 hodin, 4 tlačítka a pár senzorů. A taky Maria, Nyan Cat nebo třeba Hollyho.


Pro vývojáře je k dispozici kombinované SDK v C a Javascriptu. Co z principu nezvládnou hodinky totiž Pebble outsourcuje do telefonu, kde běží JS engine s přístupem třeba k internetu nebo geolokaci. Nad SDK existuje i wrapper kompletně v Javascriptu, který je ale trochu pozadu a Time Round k mému velkému zklamání zatím ještě nepodporuje.

Kromě lokální instalace se dá tvořit i v cloudovém editoru, jenže to je samozřejmě málo hardcore, takže využijeme dodávaného toolu v Pythonu, který nám kromě SDK nainstaluje i užitečné blbiny jako emulátor prostředí hodinek, webový emulátor senzorů nebo nástroj na deployment přímo do fyzického zařízení.

A co si dnes uvaříme? Uplácáme si primitivní aplikaci, která nás nasměruje k nejbližšímu bankomatu České spořitelny. Budeme potřebovat:
  • Data z ČS WebAPI Places,
  • komunikaci mezi C a JS částí aplikace,
  • kreslení grafických primitiv,
  • magnetický kompas z hodinek,
  • geolokaci v mobilu,
  • internet v mobilu.
Celá aplikace bude nakonec vypadat jako na následujícím obrázku. Při spuštění zjístíme aktuální polohu, získáme nejbližší bankomat, spočítáme jeho vzdálenost a po naběhnutí magnetometrického kompasu zobrazíme šipku ve správném směru. Ideálně by se pak šipka a počet metrů měly v čase měnit podle toho, jak se k bankomatu přibližujeme.


Začneme tím, že potřebujeme data nějak zobrazovat. Pebble pracuje s konceptem oken (obrazovek) a vrstev různého typu. Aby aplikace nebyla moc složitá, rozhodl jsem se použít jenom jedno okno a a v něm textovou vrstvu pro každou řádku informací a jednu vrstvu navíc pro šipku ukazující směr k bankomatu. Pokud (zatím) nejsou k dispozici žádné informace, zobrazuje se pouze nápis Loading...

Všechna data kromě směru šipky budeme do hodinek pushovat z JS části aplikace v telefonu. Triggerem pro získání dat v telefonu bude buď spuštění aplikace, nebo timer, který bude data požadovat každou minutu. Při každém vrácení dat se pak na hodinkách překreslí celé view. Nezávisle na JS části aplikace se bude překreslovat navigační šipka.

JS z telefonu si s C aplikací v hodinkách povídá pomocí jednoduchého obousměrného protokolu zpráv. Množina zpráv je definovaná v konfiguračním souboru, a na obou koncích aplikace je pak zadrátované chování pro jednotlivé zprávy. JS tak obsahuje následující kód pro zjištění nejbližšího bankomatu, dopočítání azimutu a poslání dat do hodinek. Stejná funkce se volá na obě události definované v hodinkách, a to jsou spuštění aplikace a pravidelná žádost o refresh dat.

V hodinkách potom zaslaná událost vyvolá překreslení kompletního UI a zobrazí získaná data na display.

Ale jak namalovat šipku? A jak s ní točit podle aktuálního směru k bankomatu? Pebble nabízí přímé kreslení polygonů pomocí definice jednotlivých vrcholů. Na definovaný obrys se pak dá aplikovat rotace podle zvoleného úhlu, nadefinuje se barva výplně a můžeme kreslit. Aktuální natočení šipky pak spočítáme podle předpočítaného azimutu k bankomatu (KEY_DIRECTION) a aktuálního nasměrování hodinek. Překreslení šipky bude vyvoláno i změnou nasměrování hodinek ze služby poslouchající události vyvolané magnetometrem v hodnikách, který jde při vývoji simulovat z browseru.

No, a to je všechno, teď by aplikace měla fungovat a měla by se chovat tak, jak chceme. Můžeme jí pomocí vývojářského spojení nahrát do fyzických hodinek, nebo jí vypublikovat do Pebble store. Podle statistik jsem zatím získal velmi pěkná 3 stažení.

Jak ale doopravdy funguje? Po několika dnech pokusů a testování v reálném provozu musím říct, že dvakrát spolehlivě se to nechová... Jako nejproblematičtější se jeví komunikace s GPS v telefonu, která s Androidem spíš nefunguje než funguje, nicméně s iOS je to trochu lepší. Taky se mi nepovedlo aplikaci vnutit nějakou hezkou ikonku.

Dalším omezením je relativní roztříštěnost platformy. Ačkoliv jde teprve o pátý model značky, jedná se už o třetí kompletní iteraci vnitřní platformy a sjednocování jde poměrně pomalu. Tím pak samozřejmě trpí i dokumentace a okolní nástroje, zejména pak zmiňovaný JS wrapper. S jeho pomocí je vývoj na všechny platformy výrazně jednodušší a přímočařejší. Pokud bychom chtěli aplikaci naportovat na starší modely, musí se ručně zoptimalizovat celá řada drobností, a to je prostě nuda.

Dává tedy smysl se nyní zabývat hodinkami Pebble, potažmo jakýmikoliv jinými chytrými hodinkami? Podle mého názoru to má ještě čas.

I na stavu a stabilitě vývojářských nástrojů je hrozně vidět, že se jedná o velmi mladou oblast, která vlastně ještě hledá, k čemu by mohla být lidstvu užitečná. Očekává se, že v polovině roku představí Apple novou verzi svých Apple Watch a já se vsadím, že budou z velké části nekompatibilní s těmi původními. Zatím jedinou extrémně přínosnou funkcí je to, že při každé notifikaci nemusíte tahat telefon z kapsy.

Žádné komentáře:

Okomentovat