Vývoj pro Maemo a iné platformy http://www.modrana.org/om2011/workshop.pdf
[email protected]
Vývoj pro Maemo a jiné platformy
platformy
vývoj pro desktop vs vývoj pro mobilní zařízení
Tipy & triky
Komunita a uživatelé
příklad vývojového cyklu ”mobilní” aplikace
Platformy
plnokrevné
Linuxové jádro, XServer a userland
Maemo, Meego
OpenEmbedded a deriváty (SHR,AIOS,...)
mobilní verze desktopových distribucí
neplnokrevné
jádro a nic moc víc
Android, WebOS
Maemo
v současnosti asi nejrozšířenější plnokrevná linuxová platforma
jedná z mála použitelných i pro jiné věci než vývoj
výhled do budoucna je však nejistý
nejrelevantnější je asi Maemo 5 @ N900
Maemo <=4 bylo na starších NIT
Maemo není plně opensource, což de facto znemožňuje jeho portování na jiné platformy
Maemo - nástroje
”default” = GTK + Hildon + C++
”nový default” = Qt + QML
k dispozici je SDK, včetně emulátoru a prostředí pro kompilaci ARM binárek (Scratchbox) široce používaný je také Python
dostupná verze 2.5 prostřednictvím projektu PyMaemo k dispozici jsou bindingy pro GTK, Hildon, Qt i Clutter
Maemo - nástroje
v repozitářích je toho opravdu hodně:
Free Pascal, Mono + monodevelop (!), swiprolog
texlive
OpenJDK
SDL
Perl, Ruby
PHP
není tam Haskell :)
Maemo - repozitáře
po zaregistrování je možné nahrávat vlastní balíky
balíčkovací systém je převzatý z Debianu
balíčky jdou nejdříve do ExtrasDevel
vývojový, ”nebezpečný” repozitář
má jej zapnutý většina (?) uživatelů :)
z ExtrasDevel je možné balíčky přez Extras Testing dostat do Extras ”bezpečného” repozitáře
uživatelétesteři hlasují pro balíky v Testing
Maemo - komunita
středem komunity je maemo.org a zejména talk.maemo.org = TMO je dobrým zvykem každý nově vzniklý projekt ohlásit samostatným vláknem na TMO
komunitu tvoří uživatelé z celého světa
spolupráce mezi autory
vetšina navigačních aplikací sdílí mapové podklady
Maemo – kam s projektem
garage.maemo.org poskytuje hostování pro Maemo projekty mnoho projektů je také na Gitorious (kde je např. také Qt), další jsou na Githubu do přílohy vlákna na TMO :)
Maemo - problémy
Kernel zmrazený na 2.6.28 kvůli uzavřenému ovladači GPU
tento ovladač také nemá vsync a občas zasekne X Server
Glib 2.20
USB konektor na N900 má sklon k ulomení
Nokia
MeeGo
bouřlivý vývoj a poněkud nepřehledná situace
kdo rozhoduje ? skryté týmy
papírově Maemo + Moblin
v zásadě hlavně podvozek s jednotným API
IVI, Handset, Tablet, Settopbox,...
OBS pro buildování
RPM pro balíky
defaultně Qt + QML pro všechno
Open Embeaded, SHR a spol
pomalu, ale jistě
Open Embedded tvoří základ pro řadu distribucí
SHR pro Neo, N900 a další
Web OS na zařízeních Palm/HP
AIOS pro Touch, Smart, Mini booky
OS na Open Pandoře
OPKG balíčky
bitbake ”recepty”
Middleware
FSO, Ofono, QtMobility
zpřístupnění lowlevel HW jednotným API
sensory, telefon, GPS
zpravidla přez DBUS
Telepathy
sjednocené IM + SMS
Tracker
indexuje multimediální data
Desktop vs ”mobil”
dotyková obrazovka nemá pravé tlačítko
jak spustit kontextová menu?
dotyková obrazovka nemá kurzor
nelze použít kontextovou ”on mouse over” nápovědu
dotyková obrazovka ovládaná prsty je nepřesná
dvojklik je radno používat s rozmyslem
tah (drag) = kolečko/šipky
tah vs výběr textu
Desktop vs ”mobil”
co je ještě kliknutí a co je už tah?
obrazovka mobilních zařízení je zpravidla malá
je dobré počítat s provozem v portrait i landscape
0 až N hardwarových tlačítek
hardwarová tlačítka by měla být doplnkěm k dotykovému ovládání
mobilní zařízení mají senzory, které běžné počítače nemají
akcelerometry, gyroskopy, kompasy, kamery, detektory jasu, detektory blízkosti, ...
Desktop vs ”mobil”
mobilní zařízení jedou na baterie
program by měl dělat jen to co je potřeba
nepoužívat busy waiting > reagovat na události
je vhodné použít hardwarovou akceleraci
použití GPU nebo DSP může ušetřit energii a zrychlit program vzhledem k problémům s uzavřenými ovladači však nemusí vždy fungovat, i když zařízení potřebný hardware fyzicky obsahuje není vhodné na akceleraci přímo záviset
T&T: Rsync !
pro rychlé testování aplikace na mobilním zařízení dostupný pro většinu mobilních linuxových platforem přenáší jen změny
použití s SSH přez (GPRS) internet
s přepínačem delete → pouštíme opravdu to stejné máme na vývojovém stroji
T&T: Python !
není třeba kompilovat
hezké a dobře čitelné vyjímky
stačí, když někdo skompiluje Python pro platformu uživatelé vědí, že se něco stalo a že to mají reportovat
dostatečně rychlý
T&T: Kinetické scrolování
uživatel ”pustí” obrazovku
rozhodnout click/drag
drag → start KS → spočítat rychlost
kliknutí zastaví probíhající KS
každý frame
zjistit kolik času uběhlo od předchozího
podle toho posunout
lineárně brzdit
když rychlost klesně pod treshold nebo dojde čas nebo posun narazí na oba kraje → zastavit
T&T: Maemo autorotace
modul z Gpodderu
pro Python
stačí zapojit callbacky při startu
možno locknout v landscape/portrait
T&T: Maemo podsvícení
v základu se obrazovka ztlumí a pak zhasne
zhasnutí je možné odložit o 60 sekund přes DBUS
připojit se na MCE
zavolat req_display_blanking_pause
T&T: Maemo viditelnost
je možné se připojit na MCE signál display_status_ind
vypnutí zapnutí obrazovky
jak poznat, že je aplikace na pozadí ?
isactive signál na hlavním GTK okně
isvisible nefunguje (ani na Compizu)
nevolejte na okno minimize, není to dobrý nápad :)
T&T: Tlačítka pro hlasitost
jak používat tlačítka pro hlasitost na N900 ?
viz. příklad
nepěkný GTK hack :)
hlásí se jako F7 a F8
T&T: Device modul
různé platformy potřebují různé hacky je vhodné platformě specifický kód soustředit do ”devicemodulu”
jednotné API
nová platforma → stačí nový device modul
T&T: Profilování
stačí i jednoduché časování přímo v kódu
dobré pro porovnání výkonu PC vs zařízení
na N900 jde použít cProfile
s prof2dot dělá hezké grafy volání a stráveného času :)
Komunita a uživatelé
programy nepíšeme do šuflíku, ale pro uživatele současná komunita kolem mobilních linuxových zařízení zahrnuje nadprůměrné množství pokročilých uživatelů
často se jedná i přímo o vývojáře což ale nemusí platit navždy a neomlová to těžkopádný a neintuitivní návrh aplikací
Komunita a uživatelé
přímá komunikace probíhá zpravidla jen s malou skupinou uživatelů
většina uživatelů se nikdy neozve s nápady ani se stížnostmi
je obtížné/nemožné odhadnou skutečný počet uživatelů
statistiky stažení z repozitářů, pokud jsou, zahrnují jak instalace tak upgrady aktivní/neaktivní uživatelé ?
Komunita a uživatelé
uživatelé jsou cenným zdrojem nápadů uživatelé hlásí chyby, na které se nepřišlo během vývoje uživatelé mohou mít to, co nemáte vy
jiná mobilní zařízení
motorku, loď, auto, řidičák
šílené nápady
zpětná vazba od uživatelů poskytuje pocit zadostiučinění :)
Příklad vývojového cyklu
jak může vypadat vývoj programu pro mobilní zařízení:
nápad
volba technických prostředků
vývoj a testování
balíčkování a vydání
další vývoj na základě zpětné vazby od uživatelů
0. Důvod vzniku
na Maemo neexistuje použitelný prohlížeč na mangu a comixy
Comix je pomalý
CBR Pager je neergonomický
je potřeba otestovat PyClutter pro plánované použití v modRaně Meego Coding Competition 2011
1. Nápad
vytvořit plnohodnotnou čtečku mangy a comixů pro mobilní zařízení
rychlost + kinetické scrollování
ergonomie při používání
podpora pro šireké spektrum formátů – včetně obrázků v adresářích
jednoduchý přechod na další kapitolu
otevření naposledy otevřené strany při startu
fullscreen tlačítko
podpora hw tlačítek
2. volba technických prostředků
Python kvůli snadné přenositelnost a praxi
Clutter pro animaci stránek
GTK + Hildon pro zbytek UI
historie, konfigurace, upozornění
všechny platformě specifické věci izolovat do samostatného modulu s jednotným API
pro lepší přenositelnost
GIT pro verzování
psaní kódu na PC, testování na N900 (rsync&run)
3.1 Vývoj +
příjemná překvapení:
použití modulů magic a zipfile/rafile srazilo kód pro práci s archivy na pár řádků a díky selektivnímu načítání stránek otevření nové kapitoly probíhá velice rychle N900 dokáže za 250 ms vytáhnout z archivu obrázek, nahrát ho do Pixbufu a zobrazit na clutter.Texture PyClutter je na N900 stabilní a nepadá portrait i kinetické scrollování (jakmile je dostatečně odlazeno) jsou velmi dobře použitelné aplikace při neaktivitě zbytečně nespotřebovává energii
3.2 Vývoj
nepříjemná překvapení:
Pythoní GC bez problémů sešrotuje clutter.Timeline nebo clutter.Alpha pokud nejsou explicitně referencované GC naopak nestíhá uklízet clutter.Texture s načtenými stránkami – je nutné explicitně volat .unrealize() jinak při příliš rychlém listování dojde paměť :)
Clutter dává maximálně asi 20 FPS ve fullscreen
když má dialog focus, pozadí za ním se neobnovuje
3.2 Vývoj -
Clutter neumí načítat obrázky z pythoních filelike objektů > je nutné je protáhnout přez Pixbuf PyClutter 1.0 který se mi na Maemo podařilo rozjet má rozbité animování průhlednosti, průhlednost je nutné animovat ručně hildon.PickerButton neumožňuje vypnutí badge s aktuálně vybraným prvkem hildon.FileOpen dialog se dlouho načítá a plive varování hildon.Note nepodprouje Pango
3.3 Testování
testování přímo na mobilním zařízení je velice důležité
rozdílný výkon dotyková obrazovky vs myš – velice důležité při ladění kinetického scrollování a filtru click/drag
jednoduchý skript, který rsyncne změny na zařízení a spustí aplikaci, je super věc :) pro testování se hodí, když aplikace funguje alespoň částečně i na PC nejlépe je možné aplikaci otestovat delším používáním v reálných podmínkách
4. Balíčkování
pomocí py2deb skriptu ve Scratchboxu
je důležité vyplnit adresu bugtrackeru – email nebo platná URL pozor na volbu kategorie (viz wiki)
ikona – PNG 64x64 do:
/usr/share/icons/hicolor/48x48/
/usr/share/icons/hicolor/scalable
kořenového adresáře s py2deb skriptem
pull z GITu, spuštění py2deb skriptu a nahrání do autobuilderu pomocí webového rozhraní
5. Další vývoj podle zpětné vazby od uživatelů
přímo v aplikaci jsou uvedeny kontaktní údaje
emailová adresa projektu
odkaz na projekt na Githubu
odkaz na diskuzní vlákno na talk.maemo.org
Mieru byla vydána před 12 dny, diskuzní vlákno již hlásí přez 1000 přečtení (vlákno modRany má po cca roce 75000+ přečtení)
dosavadní reakce jsou pozitivní na základě zpětné vazby od uživatelů již byly objeveny & opraveny 2 celkem závažné bugy
5. Další vývoj podle zpětné vazby od uživatelů
uživatelé se překvapivě dobře shodují na funkcionalitě, kterou by bylo vhodné doplnit (dotyková tlačítka pro listování, přednačítání stránek) od jednoho uživatele jsem se dozvěděl, že Mieru vlastně (částečně) podporuje ePUB :) počet uživatelů je klasicky složité odhadnout
Konec !
Dotazy ? :)