Vývoj pro Maemo a iné platformy http://www.modrana.org/om2011/workshop.pdf martin.kolman@gmail.com
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, X Server 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 (!), swi prolog 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 Extras Devel vývojový, nebezpečný repozitář má jej zapnutý většina (?) uživatelů :) z Extras Devel 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 Glib 2.20 tento ovladač také nemá vsync a občas zasekne X Server 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 Telepathy Tracker zpřístupnění lowlevel HW jednotným API sensory, telefon, GPS zpravidla přez DBUS sjednocené IM + SMS 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 stačí, když někdo skompiluje Python pro platformu hezké a dobře čitelné vyjímky 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í? is active signál na hlavním GTK okně is visible 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 device modulu 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 file like 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
Dotazy? :) Konec!