1 Vývoj hybridní aplikace pro webOS CZ.NIC z.s.p.o. Bedřich Košata /
2 Plán přednášky ● Úvod ● Co jsou to datové schránky ● Ukázka výsledné aplikace ● webOS – historie, architektura a zařízení ● webOS – vývojové nástroje ● webOS – ukázka vývoje aplikace
3 Úvod ● CZ.NIC, z.s.p.o – správce národní domény.cz – „... vývoj a rozvoj obecně prospěšných služeb pro lokální internetovou komunitu...“ ● CZ.NIC Labs – vývojové oddělení CZ.NIC – personálně oddělené od provozní části – věnuje se projektům zaměřeným na DNS, sítě, ale také datové schránky – DNSSEC Validator for Firefox – BIRD – iDatovka, dsgui, libnicds ● Akademie CZ.NIC
4 Datové schránky ● Prostředek pro elektronickou komunikaci s orgány veřejné moci (OVM) ● Připomíná , ale: – Centrální úložiště zpráv – Jedna organizace má jen jednu DS – Doručení fikcí (10 dní od dodání), doručení přihlášením do schránky – Stav odeslané zprávy lze sledovat – ověření doručení ● OVM má povinnost komunikovat přednostně přes DS (pokud je to možné)
5 Způsoby přístupu k DS ● Online webové rozhraní ● SOAP rozhraní pro aplikace třetích stran – HTTPS ● Autentizace – jméno + heslo – jméno + heslo + komerční certifikát – komerční certifikát (pro spisové služby)
6 ● Desktop – dsgui & dslib – GUI aplikace v Pythonu + GTK – Linux, Mac OS X, Windows, BSD – libnicds – knihovna pro C ● Mobil – iDatovka – iPhone a iPad (od verze 2.0) – webDatovka – prototyp pro webOS založený na nemodifikované libnicds – Svobodné řešení od CZ.NIC Labs
7 Ukázka aplikace
8 webOS – pohled dovnitř ● založen na jádře Linuxu ● využívá řadu open source knihoven a programů – ● HTML + JavaScript + SDK pro tvorbu aplikací (renderovací jádro WebKit) ● pro nízkoúrovňové věci je možnost psát rozšíření v C
9 webOS – historie ● červen 2009 – Palm představuje webOS na telefonu Palm Pre ● duben 2010 – HP kupuje Palm ● říjen 2010 – vychází webOS 2 spolu s Palm Pre 2 ● únor 2011 – ohlášen telefon HP Pre 3 a tablet HP TouchPad s webOS 3.0 (vydání plánované v létě) ● květen 2011 – vydán minitelefon HP Veer s webOS 2.2
10 webOS – produkty ● telefony – Palm Pre (600 MHz, 256 MB RAM, 8 GB, 320×480, 3.1“) – Palm Pre Plus (600 MHz, 512 MB RAM, 16 GB, 320×480, 3.1“) – Palm Pixi (600 MHz, 256 MB RAM, 8 GB, 320×400, 2.6“) – Palm Pre 2 (1 GHz, 512 MB RAM, 16 GB, 320×480, 3.1“) – HP Veer (800 MHz, 512 MB RAM, 8 GB, 320×400, 2.6“) – HP Pre 3 (1.4 GHz, 512 MB RAM, 16 GB, 480×800, 3.6“) ● tablety – HP TouchPad (2x1.2 GHz, 1 GB RAM, GB, 1024×768, 9.7“)
11 webOS – vývojové nástroje ● SDK – software development kit – JavaScript + HTML – přístup k interním funkcím z JavaScriptu ● PDK – plugin development kit – gcc cross compiler + knihovny – oficiálně podporován pouze pod Windows a Mac OS X – umožňuje low-level přístup ke zdrojům – grafická stránka je obstarávána knihovnou SDL (snadná portace existujících SDL her) ● hybridní aplikace – spolupráce SDK s binární komponentou založenou na PDK
12 webOS – aktivace developer módu ● Nutné pro možnost instalace vytvořených aplikací do telefonu ● dvě možnosti – vyťukat „webos “ – vyťukat „upupdowndownleftrightleftrightbastart“
13 webOS SDK – instalace ● nainstalujeme – palm-novacom – VirtualBox ( , 4.0 není podporován, ale je možné na něj později upgradovat) – Java – ia32-libs – na 64 bitovém OS – Palm SDK ● získáme – novaterm – umožňuje terminálový přístup k zařízení – palm-generate, palm-package, palm-install – práce s balíčky – virtuální stroj s testovacím prostředím (bohužel x86)
14 webOS – emulátor palm-emulator
15 webOS – interakce se zařízením ● novaterm - terminálový přístup k zařízení á la ssh novaterm -l a19a46271ca7c591b2fcc9964c429c4042af610 usb castle-linux aebd20c9cfa70d56e95b22fbf9f55f2198d6 tcp emulator novaterm - Palm Pre:/# novaterm -d 3261aebd20c9cfa70d56e95b22fbf9f55f2198d6
16 webOS SDK – první kroky palm-generate -t new_app -p "{'id': 'cz.nic.labs.test', 'version':'0.1.0', 'vendor':'CZ.NIC', 'title':'Test'}" /tmp/test generating new_app in /tmp/test tree test test |-- app | |-- assistants | | `-- stage-assistant.js | `-- views |-- appinfo.json |-- framework_config.json |-- icon.png |-- images |-- index.html |-- sources.json `-- stylesheets `-- test.css
17 webOS SDK – první kroky palm-package test creating package cz.nic.labs.test_0.1.0_all.ipk in /tmp palm-install -d tcp cz.nic.labs.test_0.1.0_all.ipk installing package cz.nic.labs.test_0.1.0_all.ipk on device "emulator" {3261aebd20c9cfa70d56e95b22fbf9f55f2198d6} tcp palm-launch -d tcp cz.nic.labs.test launching application cz.nic.labs.test on device "emulator" {3261aebd20c9cfa70d56e95b22fbf9f55f2198d6} tcp ● webOS eclipse plugin – spouštění webOS aplikací přímo z prostředí eclipse
18 webOS SDK – základní pojmy ● Stage – jeviště – základní okno (karta) aplikace ● Scene – obsah karty – aplikace typicky obsahuje více scén – scény se překrývají jako karty v balíčku ● Assistant – JavaScript, který se stará o obsluhu jednotlivých událostí ve scéně – každá scéna má svého asistenta – jeden top-level asistent pro celou aplikaci – asistent může aktivovat další scény a přidat je na stack
19 Komponenty aplikace ● Vzhled scény – HTML + CSS + speciální atributy (x-mojo-...) ● Interakce s prvky – JavaScript (definice propojení prvků s daty, obsluha událostí) ● Externí data – Application services (otevření odkazu v prohlížeči, PDF ve čtečce) ● Systémové prostředky - System services via JavaScript (interakce s GPS, accelerometrem) ● Ukládání dat – HTML 5 db [1,2], webOS specifické alternativy12 ● Přístup ke grafice - PDK (SDL) ● Nízkoúrovňové záležitosti - PDK
20 webOS – struktura aplikace |-- app | |-- assistants | | |-- account-config-assistant.js | | |--... | | `-- stage-assistant.js | |-- models | | `-- isds-plugin.js | `-- views | |-- account-config | | `-- account-config-scene.html | |--... | `-- message-view | |-- message-list-entry.html | |-- message-list.html | `-- message-view-scene.html |... |-- app | |-- assistants | | `-- stage-assistant.js | `-- views |-- appinfo.json |-- framework_config.json |-- icon.png |-- images |-- index.html |-- sources.json `-- stylesheets `-- test.css
21 webOS – PDK ● Oficiální PDK – – využívá oficiální PDK pro Mac OS X – obsahuje cross-compiler a knihovny – vhodné pro kompilace vlastních programů bez dalších externích závislostí ● WebOS Internals PDK – – svobodná varianta oficiálního PDK – obsahuje podporu pro Scratchbox 2 – cross-kompilační prostředí – instalace trvá desítky minut a může být potřeba vyhledat si řešení nějakého problému – umožňuje pohodlně kompilovat externí knihovny s pomocí configure a make
22 webOS – interakce s pluginem ● Aplikace → plugin – volání registrovaných funkcí pluginu z JavaScriptu – probíhá synchronně – plugin může zablokovat běh aplikace – lze převést na asynchronní kombinací se zpětným voláním – vždy vrací pouze string – s výhodou lze použít JSON – z pluginu lze vyvolat výjimku ● Plugin → aplikace – volání funkcí definovaných v JavaScriptu z C – na straně aplikace svážeme volání s konkrétní JS funkcí – libovolný počet argumentů typu string – volání se provádí asynchronně bez návratové hodnoty
23 webOS – vložení pluginu ● Aplikace – vložit element object s opovídajícími parametry do HTML kódu stránky – úprava appinfo.json + vytvoření package.properties – vytvoření plugin_appinfo.json ● Plugin – definovat funkce, které budou dostupné z JavaScriptu – PDL_bool MyJSHandlerFunc(PDL_JSParameters *parms) – zaregistrovat funkce dostupné z JavaScriptu – PDL_Err PDL_RegisterJSHandler(const char *functionName, – PDL_JSHandlerFunc function) – aktivovat pomocí PDL_JSRegistrationComplete
24 webOS – vlastnosti pluginu ● běží v samostatném procesu ● musí se sám udržovat při životě, typicky vlastním event loopem ● životnost procesu odpovídá životnosti scény, která plugin inicializovala ● při vložení do více scén dochází ke vzniku nových instancí ● sdílení pluginu lze řešit vložením pomocí JavaScriptu a následným kopírováním vzniklého DOM objektu do dalších scén
25 webOS – cross-kompilace ● Scratchbox – cross-kompilační chrootované prostředí – ideální pro existující knihovny a aplikace sb2 -M /srv/preware/cross-compile/staging/mapping-armv7 [SB2 mapping-armv7 armv7] gcc -v Using built-in specs. Reading specs from /usr/share/scratchbox2/modeconf/gcc-specs.simple rename spec cpp to old_cpp Target: arm-none-linux-gnueabi Configured with: /scratch/mitchell/builds/4.3-arm-none-linux-gnueabi- respin/src/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pc- linux-gnu --target=arm-none-linux-gnueabi --enable-threads... Thread model: posix gcc version (Sourcery G++ Lite 2009q1-203)
26 webOS – cross-kompilace ● libnicds – závisí na openssl – používá autoconf a automake ● nejprve zkompilovat a nainstalovat příslušnou verzi openssl (./configure; make; make install) ● poté zkompilovat a nainstalovat libnicds (./configure; make; make install) ● libnicds přikompilovat staticky k pluginu ● není třeba žádných úprav openssl či libnicds
27 webOS – debugging ● palm-log – umožňuje sledovat výpisy z aplikace – v aplikaci - console.log(zpráva) – na konzoli - palm-log -f cz.nic.labs.webdatovka ● eclipse plugin – ukazuje log výpisy na konzoli automaticky ● plugin – debugging kódu na PC bez webOS specifických funkcí – výpis do souboru v /media/internal, apod.
28 webOS – debugging palm-log --system-log-level info setting log level to info on device "castle-linux" {5a19a46271ca7c591b2fcc9964c429c4042af610} usb palm-log -f cz.nic.labs.webdatovka following logs for application cz.nic.labs.webdatovka on device "castle- linux" {5a19a46271ca7c591b2fcc9964c429c4042af610} usb [ :04: ] info: =========> Calling palmInitFramework367, /usr/palm/frameworks/mojo/mojo.js:142 [ :04: ] info: Requested submission : 367 [ :04: ] info: Current locale is en_us [ :04: ] error: Uncaught TypeError: Object # has no method 'screenOrientationChanged' [ :04: ] warning: document had scroll top set, resetting. [ :04: ] info: About to activate scene front-page [ :04: ] info: Transition ended.
29 webOS – lokalizace ● JavaScript – lokalizuje se á la gettext označením textu k překladu přímo v kódu – překlady se definují v adresáři resources v souborech strings.json – $L("Hello, world."); ● HTML – v adresáři resources se vytvoří alternativní verze HTML souborů pro každý podporovaný jazyk ● Metadata – jméno aplikace, apod. – v adresáři resources se vytvoří alternativní appinfo.json soubor pro každý podporovaný jazyk
30 webOS – postřehy ● mnoho věcí je asynchronních – přístup k databázi – práce s pluginem, pokud synchronní verze není dostatečně rychlá ● globální proměnné šetří práci
31 Závěr ● webOS je rozumně otevřená platforma ● vývoj pod Linuxem není 100% podporován ● existuje komunita schopná pomoci ● dokumentace je dostatečná (i když je stále co zlepšovat) ● HP bude webOS silně prosazovat – doufejme, že brzo již uvidíme oficiální prodej i u nás
32 Děkuji za pozornost Bedřich Košata