Vývoj hybridní aplikace pro webos CZ.NIC z.s.p.o. Bedřich Košata / bedrich.kosata@nic.cz 18. 6. 2011 1
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 2
Ú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 - http://www.nic.cz/akademie/ 3 http://labs.nic.cz/
Datové schránky Prostředek pro elektronickou komunikaci s orgány veřejné moci (OVM) Připomíná e-mail, 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é) 4
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) 5
Svobodné řešení od CZ.NIC Labs Desktop dsgui & dslib libnicds GUI aplikace v Pythonu + GTK Linux, Mac OS X, Windows, BSD knihovna pro C Mobil idatovka webdatovka iphone a ipad (od verze 2.0) prototyp pro webos založený na nemodifikované libnicds https://labs.nic.cz/page/909/webdatovka/ 6
Ukázka aplikace 7
webos pohled dovnitř založen na jádře Linuxu 2.6.24 využívá řadu open source knihoven a programů http://opensource.palm.com/packages.html 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 8
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 9
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 ) tablety HP Pre 3 (1.4 GHz, 512 MB RAM, 16 GB, 480 800, 3.6 ) HP TouchPad (2x1.2 GHz, 1 GB RAM, 16-32 GB, 1024 768, 9.7 ) 10
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 11
webos aktivace developer módu Nutné pro možnost instalace vytvořených aplikací do telefonu dvě možnosti vyťukat webos20090606 vyťukat upupdowndownleftrightleftrightbastart 12
webos SDK instalace nainstalujeme palm-novacom VirtualBox (3.0-3.2, 4.0 není podporován, ale je možné na něj později upgradovat) Java ia32-libs na 64 bitovém OS získáme Palm SDK 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) 13 https://developer.palm.com/content/resources/develop/sdk_pdk_download.html
webos emulátor beda@zelva:/tmp$ palm-emulator 14
webos interakce se zařízením novaterm - terminálový přístup k zařízení á la ssh beda@zelva:~$ novaterm -l 41662 5a19a46271ca7c591b2fcc9964c429c4042af610 usb castle-linux 50397 3261aebd20c9cfa70d56e95b22fbf9f55f2198d6 tcp emulator beda@zelva:~$ novaterm root@ - Palm Pre:/# beda@zelva:~$ novaterm -d 3261aebd20c9cfa70d56e95b22fbf9f55f2198d6 root@qemux86:/# 15
webos SDK první kroky beda@zelva:/tmp$ 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 beda@zelva:/tmp$ tree test test -- app -- assistants `-- stage-assistant.js `-- views -- appinfo.json -- framework_config.json -- icon.png -- images -- index.html -- sources.json `-- stylesheets `-- test.css 16
webos SDK první kroky beda@zelva:/tmp$ palm-package test creating package cz.nic.labs.test_0.1.0_all.ipk in /tmp beda@zelva:/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 39196 beda@zelva:/tmp$ palm-launch -d tcp cz.nic.labs.test launching application cz.nic.labs.test on device "emulator" {3261aebd20c9cfa70d56e95b22fbf9f55f2198d6} tcp 39196 webos eclipse plugin spouštění webos aplikací přímo z prostředí eclipse 17
webos SDK základní pojmy Stage jeviště základní okno (karta) aplikace Scene obsah karty aplikace typicky obsahuje více scén Assistant scény se překrývají jako karty v balíčku 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 18
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é alternativy Přístup ke grafice - PDK (SDL) Nízkoúrovňové záležitosti - PDK 19
webos struktura aplikace -- app -- assistants `-- stage-assistant.js `-- views -- appinfo.json -- framework_config.json -- icon.png -- images -- index.html -- sources.json `-- stylesheets `-- test.css -- 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... 20
webos PDK Oficiální PDK https://github.com/kayahr/linux-webos-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 http://www.webos-internals.org/wiki/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 21
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 22 https://developer.palm.com/content/content/api/dev-guide/pdk/js-and-plug-in-interface.html
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 23 https://developer.palm.com/content/content/api/dev-guide/pdk/js-and-plug-in-interface.html
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 24
webos cross-kompilace Scratchbox cross-kompilační chrootované prostředí ideální pro existující knihovny a aplikace beda@gaspode:~$ sb2 -M /srv/preware/cross-compile/staging/mapping-armv7 [SB2 mapping-armv7 armv7] beda@gaspode~$ 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-gnueabirespin/src/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pclinux-gnu --target=arm-none-linux-gnueabi --enable-threads... Thread model: posix gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) 25
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 26
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. 27
webos debugging beda@zelva:~/projects/webdatovka$ palm-log --system-log-level info setting log level to info on device "castle-linux" {5a19a46271ca7c591b2fcc9964c429c4042af610} usb 53412 beda@zelva:~/projects/webdatovka$ palm-log -f cz.nic.labs.webdatovka following logs for application cz.nic.labs.webdatovka on device "castlelinux" {5a19a46271ca7c591b2fcc9964c429c4042af610} usb 53412 [20110615-13:04:31.156127] info: =========> Calling palminitframework367, /usr/palm/frameworks/mojo/mojo.js:142 [20110615-13:04:32.079925] info: Requested submission : 367 [20110615-13:04:32.085937] info: Current locale is en_us [20110615-13:04:32.439941] error: Uncaught TypeError: Object #<an Object> has no method 'screenorientationchanged' [20110615-13:04:32.668334] warning: document had scroll top set, resetting. [20110615-13:04:32.912078] info: About to activate scene front-page [20110615-13:04:33.088623] info: Transition ended. 28
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 29 https://developer.palm.com/content/api/dev-guide/mojo/localization.html
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 30
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 31
Děkuji za pozornost Bedřich Košata bedrich.kosata@nic.cz http://labs.nic.cz/datove-schranky/ http://www.nic.cz 32