SlideShare ist ein Scribd-Unternehmen logo
1 von 51
Downloaden Sie, um offline zu lesen
Web applications support on AGL
Roger Zanoni
Igalia - AGL AMM, 09.03.2023
Web applications support on AGL
Roger Zanoni, Igalia
Agenda
● About
● Web Application Manager
● Exposing system services to web apps
● How to create and debug web applications in AGL
● Status and future plans
Web applications support on AGL
Roger Zanoni, Igalia
About me
● Hi, I'm Roger
● Chromium team at Igalia
● Working on WAM and demo applications on AGL
Web applications support on AGL
Roger Zanoni, Igalia
About Igalia
● Open Source Consultancy with HQ in Galicia, Spain
● 100+ engineers around the world
● Web rendering and browsers experience in Chromium, WebKit, WPE and Firefox,
Compilers, JavaScript engines (V8, JSC), Graphics, Multimedia, Kernel, Accessibility
● 2nd main contributor to Chrome, right after Google
● 2nd main contributor to WebKit, right after Apple
Web Engines Hackfest
Be a part of the Hackfest
Web applications support on AGL
Roger Zanoni, Igalia
WAM
WAM = Web Application Manager
Web applications support on AGL
Roger Zanoni, Igalia
WAM
WAM = Web Application Manager
● Not framework specific. Any front-end framework allowed.
Web applications support on AGL
Roger Zanoni, Igalia
WAM
WAM = Web Application manager
● Not framework specific. Any front-end framework allowed.
● Out-of-the-box compatibility with standard web APIs
Web applications support on AGL
Roger Zanoni, Igalia
WAM
WAM = Web Application manager
● Not framework specific. Any front-end framework allowed.
● Out-of-the-box compatibility with standard web APIs
● Built on top of chromium (webosose)
Web applications support on AGL
Roger Zanoni, Igalia
WAM
WAM = Web Application manager
● Not framework specific. Any front-end framework allowed.
● Out-of-the-box compatibility with standard web APIs
● Built on top of chromium (webosose)
● Manages webapp life-cycle
Web applications support on AGL
Roger Zanoni, Igalia
WAM
WAM = Web Application manager
● Not framework specific. Any front-end framework allowed.
● Out-of-the-box compatibility with standard web APIs
● Built on top of chromium (webosose)
● Manages webapp life-cycle
● CPU usage optimization, status monitoring, memory management
Web applications support on AGL
Roger Zanoni, Igalia
How it works?
WAM: an embedded web runtime history for LG webOS and
Automotive Grade Linux - FOSDEM 2023, José Dapena
Web applications support on AGL
Roger Zanoni, Igalia
How is it used?
Web applications support on AGL
Roger Zanoni, Igalia
Demo applications
Web applications support on AGL
Roger Zanoni, Igalia
WAM: launching an application
libcbe
WebOSE Chromium
Chromium
Web Application Manager
applaunchd
Web applications support on AGL
Roger Zanoni, Igalia
WAM: launching an application
Browser
RenderProcessHost
AppServiceDelegateAGL
Renderer
RenderProcess
AGLAppServiceInjection
Chromium MPA
Web applications support on AGL
Roger Zanoni, Igalia
webapp: start an app
<a class="button" id="app-{{id}}" app-id="{{ id }}"
onclick="window.start(this);">
...
</a>
Web applications support on AGL
Roger Zanoni, Igalia
chromium: injection (1)
neva/injection/renderer/agl_appservice/agl_appservice_injection.h/cc
const char kNavigatorObjectName[] = "navigator";
const char kAppServiceObjectName[] = "appService";
const char kStartMethodName[] = "start";
const char kGetApplicationsMethodName[] = "getApplications";
Web applications support on AGL
Roger Zanoni, Igalia
chromium: injection (2)
… AGLAppServiceInjection::CreateAppServiceObject(
v8::Isolate* isolate,
v8::Local<v8::Object> parent) {
gin::Handle<AGLAppServiceInjection> appservice =
gin::CreateHandle(isolate, new AGLAppServiceInjection());
parent->Set(isolate->GetCurrentContext(),
gin::StringToV8(isolate, kAppServiceObjectName), appservice.ToV8())
.Check();
...
}
Web applications support on AGL
Roger Zanoni, Igalia
chromium: injection (3)
v8::Local<v8::String> navigator_name =
gin::StringToV8(isolate, kNavigatorObjectName);
v8::Local<v8::Object> navigator;
gin::Converter<v8::Local<v8::Object>>::FromV8(
isolate, global->Get(context, navigator_name).ToLocalChecked(),
&navigator);
CreateAppServiceObject(isolate, navigator).ToLocal(&app_service);
(JS) navigator.appService …
Web applications support on AGL
Roger Zanoni, Igalia
chromium: injection (4)
gin::ObjectTemplateBuilder AGLAppServiceInjection::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
return gin::Wrappable<AGLAppServiceInjection>::GetObjectTemplateBuilder(
isolate)
.SetMethod(kStartMethodName, &AGLAppServiceInjection::Start)
… ;
}
(JS) navigator.appService.start()
Web applications support on AGL
Roger Zanoni, Igalia
chromium: injection (5)
mojo::Remote<pal::mojom::AppService> remote_appservice_;
void AGLAppServiceInjection::Start(gin::Arguments* args) {
...
remote_appservice_->Start(application_id);
}
Web applications support on AGL
Roger Zanoni, Igalia
chromium: dbus,browser
void Start(const std::string& application_id) {
dbus::MethodCall method_call(kAutomotiveLinuxAppLaunchName, kMethodStart);
dbus::MessageWriter writer(&method_call);
writer.AppendString(application_id);
applaunch_proxy_->CallMethod(&method_call,
dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
base::DoNothing());
}
neva/pal_service/agl/appservice_delegate_agl.h/cc
Web applications support on AGL
Roger Zanoni, Igalia
applaunchd: webapps
export function start(appId) {
navigator.appService.start(appId);
}
<a class="button" id="app-{{id}}" app-id="{{ id }}"
onclick="window.start(...);">
...
</a>
Web applications support on AGL
Roger Zanoni, Igalia
Building the HTML5 image
● Getting the AGL code (needs depot_tools and Yocto):
● Configuring the build and creating the image:
● If you want to work on the current release, check the AGL wiki
● Getting started guide
repo init -b master 
-u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo
repo sync
source meta-agl/scripts/aglsetup.sh -f -m <target_architecture> 
-b build agl-devel agl-demo
bitbake agl-ivi-demo-platform-html5
Web applications support on AGL
Roger Zanoni, Igalia
Chromium/WAM Yocto layer
● This fetches and builds the recipes of the meta-agl-demo Yocto
layer:
○ WAM
https://gerrit.automotivelinux.org/gerrit/gitweb?p=AGL/meta-a
gl-demo.git;a=blob;f=recipes-wam/wam/wam_git.bb
○ Chromium
https://gerrit.automotivelinux.org/gerrit/gitweb?p=AGL/meta-a
gl-demo.git;a=blob;f=recipes-wam/chromium/chromium_git.bb
Web applications support on AGL
Roger Zanoni, Igalia
Flashing the built images
● The generated image will be located at:
● It can be flashed with the following command:
● Then the SD card can be inserted on the device and booted for the
first time.
build/tmp/deploy/images/<arch>/agl-ivi-demo-platform-html5-<arch>.wic.xz
sudo bmaptool copy path/to/arch/agl-ivi-demo-platform-html5-<arch>.wic.xz /dev/mmcblk0
Web applications support on AGL
Roger Zanoni, Igalia
Structure of a webapp
● They can be as simple as:
○ An appinfo.json file that contains metadata such as the
application id, title, description, application type, the main file and
icon.
○ The source with any of the HTML application resources and a
LICENSE file
● There is no dependency of any specific web technology:
○ Pure HTML+JavaScript, WASM
○ Any frameworks or libraries as Enact, AngularJS, React...
Web applications support on AGL
Roger Zanoni, Igalia
Steps for creating a webapp
● Create the new git repository (or local directory) for the new
application
○ Add a main html file, all needed resources, etc
● Choose and add a license file
○ It will be needed later when we create the recipe
● Add an appconfig.json file
● Create a Yocto recipe and add it to AGL tree
Web applications support on AGL
Roger Zanoni, Igalia
Example application: Jamendo
As an example, let's create an application that simply redirects the user
to jamendo.com
Web applications support on AGL
Roger Zanoni, Igalia
appinfo.json
{
"id": "webapps-jamendo",
"title": "JAMENDO",
"description": "Free independent music streaming",
"version": "0.0.0",
"vendor": "Igalia, S.L.",
"type": "web",
"main": "index.html",
"icon": "icon.svg"
}
Web applications support on AGL
Roger Zanoni, Igalia
index.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Jamendo AGL</title>
...
</head>
<body>
<script>
window.location = "https://www.jamendo.com"
</script>
</body>
</html>
Web applications support on AGL
Roger Zanoni, Igalia
Creating the Yocto recipe
● Create a recipe folder in /meta-agl-demo/recipes-demo/
● Create the recipe file: html5-jamendo_git.bb
● Add the basic information (You can check the glossary for the meaning of each
variable, and check Yocto guides):
SUMMARY = "Free independent music streaming"
HOMEPAGE = "<homepage>"
SECTION = "apps"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=b1e01b26bacfc2232046c90a330332b3"
PV = "1.0+git${SRCPV}"
S = "${WORKDIR}/git"
B = "${WORKDIR}/build"
Web applications support on AGL
Roger Zanoni, Igalia
Creating the Yocto recipe
● Setup the fetcher of the app source:
SRC_URI = "git://github.com/rogerzanoni/html5-jamendo;protocol=https;branch=main"
SRCREV = "51624ff085bd5d57a7dc4b196bfd567f91766318"
● It's possible to set different kinds of fetchers, for example, setting
it up to fetch from a local repository:
SRC_URI = "git:///home/<path-to-source-repository>/html5-jamendo;protocol=file;branch=main"
SRCREV = "51624ff085bd5d57a7dc4b196bfd567f91766318"
Web applications support on AGL
Roger Zanoni, Igalia
Creating the Yocto recipe
● During development it may be useful to make the recipe skip fetching the
source and using a local source directory
● To do so, create a file in your directory:
● Then the option "agl-localdev" need to be passed to aglsetup.sh:
local.dev.inc <AGL_ROOT>/build/conf
INHERIT += "externalsrc"
EXTERNALSRC_pn-<recipe-name> = "/path-to-your-source-dir/"
# For instance:
# EXTERNALSRC_pn-chromium = "/path-to-the-source-dir/chromium91/"
# EXTERNALSRC_pn-wam = "/path-to-the-source-dir/wam/"
# EXTERNALSRC_pn-<webapp> = "/path-to-the-source-dir/<webapp>/"
source meta-agl/scripts/aglsetup.sh -f -m <target_architecture> 
-b build agl-devel agl-localdev agl-demo
bitbake agl-ivi-demo-platform-html5
Web applications support on AGL
Roger Zanoni, Igalia
Creating the Yocto recipe
● Finally, setup the build and install instructions:
inherit pythonnative agl-app
AGL_APP_TEMPLATE = "agl-app-web"
AGL_APP_ID = "webapps-jamendo"
AGL_APP_NAME = "JAMENDO"
WAM_APPLICATIONS_DIR = "${libdir}/wam_apps"
do_install() {
install -d ${D}${WAM_APPLICATIONS_DIR}/${PN}
cp -R --no-dereference --preserve=mode,links ${S}/* 
${D}${WAM_APPLICATIONS_DIR}/${PN}
}
Web applications support on AGL
Roger Zanoni, Igalia
Changing the html5 packagegroup
● The AGL build system needs to know where the new application is
to bake it into new images. For that, an entry needs to be added to
<AGL root>/recipes-platform/packagegroups/packagegroup-agl-demo-platform-html5.bb
...
AGL_APPS = " 
...
html5-settings 
html5-aquarium 
html5-youtube 
html5-jitsi 
html5-examples 
==> html5-jamendo 
"
...
Web applications support on AGL
Roger Zanoni, Igalia
Testing the new app on a QEMU image
● After the packagegroup setup, the application should be ready to
be build and included in the image.
○ Use "qemux86-64" as architecture and build as described in
previous slides
○ Run it with
○ Connect to the running instance using a vnc client
runqemu qemux86-64 kvm publicvnc slirp
Web applications support on AGL
Roger Zanoni, Igalia
Testing the new app on a QEMU image
Web applications support on AGL
Roger Zanoni, Igalia
Remote DevTools
● Auto enabled when the image was built with agl-devel, at port
9998
● To test while running a QEMU image, the network options can be
overridden to enable port forwarding by using the following
environment variable before running runqemu:
export QB_SLIRP_OPT="-netdev user,id=net0,hostfwd=tcp::2222-:22,hostfwd=tcp::9999-:9998"
Web applications support on AGL
Roger Zanoni, Igalia
Remote DevTools
Web applications support on AGL
Roger Zanoni, Igalia
Interacting with services
● The current HVAC AGL demo communicates with kuksa.val
● Clients can use websockets connect to the listening port 8090
Web applications support on AGL
Roger Zanoni, Igalia
Tailwind HVAC demo
Web applications support on AGL
Roger Zanoni, Igalia
Communicating with the server
● Connect to the server using a websocket:
var socket = new WebSocket('wss://localhost:8090');
● After connecting, to be able to use the signals, the client must be
authorized:
socket.onopen = function(event) {
init();
}
function init() {
authorize();
...
}
function authorize() {
var data = {
action: 'authorize',
tokens: <authToken>,
requestId: <requestId>,
};
socket.send(JSON.stringify(data));
}
Web applications support on AGL
Roger Zanoni, Igalia
Communicating with the server
● <authToken> is the JSON Web Token of your client
○ On real applications each application must have their own
tokens, but for development the kuksa.val keys can be used
○ kuksa.val repository provides a doc with more information
● <requestId> is a unique id set by the client and returned by the
server in the response
● More info about the protocol can be found in kuksa.val
documentation and VISS specs
Web applications support on AGL
Roger Zanoni, Igalia
Subscribing
● After the authentication, the client can subscribe to vehicle signals
to receive notifications of value changes:
function subscribe(path) {
var data = {
action: 'subscribe',
tokens: <authToken>,
requestId: requestId,
path: path,
};
socket.send(JSON.stringify(data));
}
socket.onmessage = function(event) {
var jsonData = JSON.parse(event.data);
if (jsonData.action == 'get' ||
jsonData.action =='subscription') {
...
}
}
Web applications support on AGL
Roger Zanoni, Igalia
Setting/Getting data
● Similar signals can be used to set/retrieve data:
function get(path) {
var data = {
action: 'get',
tokens: <authToken>,
requestId: <requestId>,
path: path,
};
socket.send(JSON.stringify(data));
}
function set(path, value) {
var data = {
action: 'set',
tokens: <authToken>,
requestId: <requestId>,
path: path,
value: value,
};
socket.send(JSON.stringify(data));
}
Web applications support on AGL
Roger Zanoni, Igalia
Sample code
● AGL html5 webapp demos
○ https://gerrit.automotivelinux.org/gerrit/admin/repos/q/filter:html5
● Jamendo
○ App https://github.com/rogerzanoni/html5-jamendo
○ Recipe https://github.com/rogerzanoni/html5-jamendo-recipe
● Tailwind HVAC demo
○ App https://github.com/rogerzanoni/html5-tailwind-hvac
○ Recipe https://github.com/rogerzanoni/html5-tailwind-hvac-recipe
Web applications support on AGL
Roger Zanoni, Igalia
Ongoing work and future plans
● Upgrade chromium to milestone 94
● Improve application deployment
● Bring back chromium as an app
● Make it possible to use gRPC on webapps
● Use gRPC to communicate with applaunchd
● Experiment with CEF instead of chromium webosose
Web applications support on AGL
Roger Zanoni, Igalia
CEF
● Easy branch switching, CEF branches are created to track each
chromium release milestone
● Eliminate dependency the WebOS release cycle for Chromium
updates
● CEF follows chromium release cycle and usually is only one week
behind
● Upgrades would be quicker
Web applications support on AGL
Roger Zanoni, Igalia
Thanks
Contact:
● José Dapena - jdapena@igalia.com
● Lorenzo Tilve - ltilve@igalia.com
● Roger Zanoni - rzanoni@igalia.com
Web applications support on AGL

Weitere ähnliche Inhalte

Was ist angesagt?

2011年度 新3年生向け
2011年度 新3年生向け2011年度 新3年生向け
2011年度 新3年生向けYuki Takahashi
 
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ 【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ 日本マイクロソフト株式会社
 
第20回 OpenStack勉強会 Neutron Deep Dive - DVR
第20回 OpenStack勉強会 Neutron Deep Dive - DVR第20回 OpenStack勉強会 Neutron Deep Dive - DVR
第20回 OpenStack勉強会 Neutron Deep Dive - DVRToru Makabe
 
Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !
Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !
Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !Pierre-jean Texier
 
DockerとKubernetesをかけめぐる
DockerとKubernetesをかけめぐるDockerとKubernetesをかけめぐる
DockerとKubernetesをかけめぐるKohei Tokunaga
 
Project ACRN: SR-IOV implementation
Project ACRN: SR-IOV implementationProject ACRN: SR-IOV implementation
Project ACRN: SR-IOV implementationGeoffroy Van Cutsem
 
Launch the First Process in Linux System
Launch the First Process in Linux SystemLaunch the First Process in Linux System
Launch the First Process in Linux SystemJian-Hong Pan
 
君にもできる! にゅーとろん君になってみよー!! 「Neutronになって理解するOpenStack Net - OpenStack最新情報セミナー ...
君にもできる! にゅーとろん君になってみよー!!  「Neutronになって理解するOpenStack Net - OpenStack最新情報セミナー ...君にもできる! にゅーとろん君になってみよー!!  「Neutronになって理解するOpenStack Net - OpenStack最新情報セミナー ...
君にもできる! にゅーとろん君になってみよー!! 「Neutronになって理解するOpenStack Net - OpenStack最新情報セミナー ...VirtualTech Japan Inc.
 
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~NTT Communications Technology Development
 
OpenStack with SR-IOV
OpenStack with SR-IOVOpenStack with SR-IOV
OpenStack with SR-IOVHideki Saito
 
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!Mr. Vengineer
 
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!Kohei Tokunaga
 
A5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えしますA5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えしますester41
 
[OpenStack 하반기 스터디] Interoperability with ML2: LinuxBridge, OVS and SDN
[OpenStack 하반기 스터디] Interoperability with ML2: LinuxBridge, OVS and SDN[OpenStack 하반기 스터디] Interoperability with ML2: LinuxBridge, OVS and SDN
[OpenStack 하반기 스터디] Interoperability with ML2: LinuxBridge, OVS and SDNOpenStack Korea Community
 
YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方wata2ki
 
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...VirtualTech Japan Inc.
 
Qemu device prototyping
Qemu device prototypingQemu device prototyping
Qemu device prototypingYan Vugenfirer
 
Yocto bspを作ってみた
Yocto bspを作ってみたYocto bspを作ってみた
Yocto bspを作ってみたwata2ki
 

Was ist angesagt? (20)

2011年度 新3年生向け
2011年度 新3年生向け2011年度 新3年生向け
2011年度 新3年生向け
 
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ 【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
 
第20回 OpenStack勉強会 Neutron Deep Dive - DVR
第20回 OpenStack勉強会 Neutron Deep Dive - DVR第20回 OpenStack勉強会 Neutron Deep Dive - DVR
第20回 OpenStack勉強会 Neutron Deep Dive - DVR
 
Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !
Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !
Diving into SWUpdate: adding new platform support in 30minutes with Yocto/OE !
 
DockerとKubernetesをかけめぐる
DockerとKubernetesをかけめぐるDockerとKubernetesをかけめぐる
DockerとKubernetesをかけめぐる
 
Project ACRN: SR-IOV implementation
Project ACRN: SR-IOV implementationProject ACRN: SR-IOV implementation
Project ACRN: SR-IOV implementation
 
Launch the First Process in Linux System
Launch the First Process in Linux SystemLaunch the First Process in Linux System
Launch the First Process in Linux System
 
君にもできる! にゅーとろん君になってみよー!! 「Neutronになって理解するOpenStack Net - OpenStack最新情報セミナー ...
君にもできる! にゅーとろん君になってみよー!!  「Neutronになって理解するOpenStack Net - OpenStack最新情報セミナー ...君にもできる! にゅーとろん君になってみよー!!  「Neutronになって理解するOpenStack Net - OpenStack最新情報セミナー ...
君にもできる! にゅーとろん君になってみよー!! 「Neutronになって理解するOpenStack Net - OpenStack最新情報セミナー ...
 
レシピの作り方入門
レシピの作り方入門レシピの作り方入門
レシピの作り方入門
 
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
 
OpenStack with SR-IOV
OpenStack with SR-IOVOpenStack with SR-IOV
OpenStack with SR-IOV
 
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
 
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
 
A5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えしますA5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えします
 
[OpenStack 하반기 스터디] Interoperability with ML2: LinuxBridge, OVS and SDN
[OpenStack 하반기 스터디] Interoperability with ML2: LinuxBridge, OVS and SDN[OpenStack 하반기 스터디] Interoperability with ML2: LinuxBridge, OVS and SDN
[OpenStack 하반기 스터디] Interoperability with ML2: LinuxBridge, OVS and SDN
 
YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方
 
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...
OVS VXLAN Network Accelaration on OpenStack (VXLAN offload and DPDK) - OpenSt...
 
Qemu device prototyping
Qemu device prototypingQemu device prototyping
Qemu device prototyping
 
Sw update elce2017
Sw update elce2017Sw update elce2017
Sw update elce2017
 
Yocto bspを作ってみた
Yocto bspを作ってみたYocto bspを作ってみた
Yocto bspを作ってみた
 

Ähnlich wie Web applications support on AGL

HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)
HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)
HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)Igalia
 
HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...
HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...
HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...Igalia
 
Desenvolvimento Mobile Híbrido
Desenvolvimento Mobile HíbridoDesenvolvimento Mobile Híbrido
Desenvolvimento Mobile HíbridoJuliano Martins
 
AngularJS Project Setup step-by- step guide - RapidValue Solutions
AngularJS Project Setup step-by- step guide - RapidValue SolutionsAngularJS Project Setup step-by- step guide - RapidValue Solutions
AngularJS Project Setup step-by- step guide - RapidValue SolutionsRapidValue
 
Liquid Day - Retos modernos del desarrollo de aplicaciones de negocio
Liquid Day - Retos modernos del desarrollo de aplicaciones de negocioLiquid Day - Retos modernos del desarrollo de aplicaciones de negocio
Liquid Day - Retos modernos del desarrollo de aplicaciones de negocioSoftware Guru
 
GDG Devfest 2016 session on Android N
GDG Devfest 2016 session on Android NGDG Devfest 2016 session on Android N
GDG Devfest 2016 session on Android NImam Raza
 
Getting Started With Django
Getting Started With DjangoGetting Started With Django
Getting Started With Djangojeff_croft
 
IPhone Web Development With Grails from CodeMash 2009
IPhone Web Development With Grails from CodeMash 2009IPhone Web Development With Grails from CodeMash 2009
IPhone Web Development With Grails from CodeMash 2009Christopher Judd
 
Develop Android/iOS app using golang
Develop Android/iOS app using golangDevelop Android/iOS app using golang
Develop Android/iOS app using golangSeongJae Park
 
Introduction to Google Drive API
Introduction to Google Drive APIIntroduction to Google Drive API
Introduction to Google Drive APIJomar Tigcal
 
Web Applications Support with the Chromium Embedded Framework on AGL
Web Applications Support with the Chromium Embedded Framework on AGLWeb Applications Support with the Chromium Embedded Framework on AGL
Web Applications Support with the Chromium Embedded Framework on AGLIgalia
 
GWT + Gears : The browser is the platform
GWT + Gears : The browser is the platformGWT + Gears : The browser is the platform
GWT + Gears : The browser is the platformDidier Girard
 
Getting Started with Android - OSSPAC 2009
Getting Started with Android - OSSPAC 2009Getting Started with Android - OSSPAC 2009
Getting Started with Android - OSSPAC 2009sullis
 
Mobile backends with Google Cloud Platform (MBLTDev'14)
Mobile backends with Google Cloud Platform (MBLTDev'14)Mobile backends with Google Cloud Platform (MBLTDev'14)
Mobile backends with Google Cloud Platform (MBLTDev'14)Natalia Efimtseva
 
Go for Mobile Games
Go for Mobile GamesGo for Mobile Games
Go for Mobile GamesTakuya Ueda
 
#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...
#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...
#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...e-Legion
 
Guadec 2012 lt - web application stores in gnome
Guadec 2012   lt - web application stores in gnomeGuadec 2012   lt - web application stores in gnome
Guadec 2012 lt - web application stores in gnomeJosé Dapena Paz
 
Web application stores in GNOME (GUADEC 2012)
Web application stores in GNOME (GUADEC 2012)Web application stores in GNOME (GUADEC 2012)
Web application stores in GNOME (GUADEC 2012)Igalia
 

Ähnlich wie Web applications support on AGL (20)

HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)
HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)
HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)
 
HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...
HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...
HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...
 
Desenvolvimento Mobile Híbrido
Desenvolvimento Mobile HíbridoDesenvolvimento Mobile Híbrido
Desenvolvimento Mobile Híbrido
 
AngularJS Project Setup step-by- step guide - RapidValue Solutions
AngularJS Project Setup step-by- step guide - RapidValue SolutionsAngularJS Project Setup step-by- step guide - RapidValue Solutions
AngularJS Project Setup step-by- step guide - RapidValue Solutions
 
Liquid Day - Retos modernos del desarrollo de aplicaciones de negocio
Liquid Day - Retos modernos del desarrollo de aplicaciones de negocioLiquid Day - Retos modernos del desarrollo de aplicaciones de negocio
Liquid Day - Retos modernos del desarrollo de aplicaciones de negocio
 
Ilog Ria2
Ilog Ria2Ilog Ria2
Ilog Ria2
 
GDG Devfest 2016 session on Android N
GDG Devfest 2016 session on Android NGDG Devfest 2016 session on Android N
GDG Devfest 2016 session on Android N
 
Getting Started With Django
Getting Started With DjangoGetting Started With Django
Getting Started With Django
 
IPhone Web Development With Grails from CodeMash 2009
IPhone Web Development With Grails from CodeMash 2009IPhone Web Development With Grails from CodeMash 2009
IPhone Web Development With Grails from CodeMash 2009
 
Develop Android/iOS app using golang
Develop Android/iOS app using golangDevelop Android/iOS app using golang
Develop Android/iOS app using golang
 
Introduction to Google Drive API
Introduction to Google Drive APIIntroduction to Google Drive API
Introduction to Google Drive API
 
Intro to PhoneGap
Intro to PhoneGapIntro to PhoneGap
Intro to PhoneGap
 
Web Applications Support with the Chromium Embedded Framework on AGL
Web Applications Support with the Chromium Embedded Framework on AGLWeb Applications Support with the Chromium Embedded Framework on AGL
Web Applications Support with the Chromium Embedded Framework on AGL
 
GWT + Gears : The browser is the platform
GWT + Gears : The browser is the platformGWT + Gears : The browser is the platform
GWT + Gears : The browser is the platform
 
Getting Started with Android - OSSPAC 2009
Getting Started with Android - OSSPAC 2009Getting Started with Android - OSSPAC 2009
Getting Started with Android - OSSPAC 2009
 
Mobile backends with Google Cloud Platform (MBLTDev'14)
Mobile backends with Google Cloud Platform (MBLTDev'14)Mobile backends with Google Cloud Platform (MBLTDev'14)
Mobile backends with Google Cloud Platform (MBLTDev'14)
 
Go for Mobile Games
Go for Mobile GamesGo for Mobile Games
Go for Mobile Games
 
#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...
#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...
#MBLTdev: Разработка backend для мобильного приложения с использованием Googl...
 
Guadec 2012 lt - web application stores in gnome
Guadec 2012   lt - web application stores in gnomeGuadec 2012   lt - web application stores in gnome
Guadec 2012 lt - web application stores in gnome
 
Web application stores in GNOME (GUADEC 2012)
Web application stores in GNOME (GUADEC 2012)Web application stores in GNOME (GUADEC 2012)
Web application stores in GNOME (GUADEC 2012)
 

Mehr von Igalia

A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Building End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPEBuilding End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPEIgalia
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Automated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded DevicesAutomated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded DevicesIgalia
 
Embedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to MaintenanceEmbedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to MaintenanceIgalia
 
Optimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdfOptimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdfIgalia
 
Running JS via WASM faster with JIT
Running JS via WASM      faster with JITRunning JS via WASM      faster with JIT
Running JS via WASM faster with JITIgalia
 
To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!Igalia
 
Implementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamerImplementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamerIgalia
 
8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in MesaIgalia
 
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por IgaliaIntroducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por IgaliaIgalia
 
2023 in Chimera Linux
2023 in Chimera                    Linux2023 in Chimera                    Linux
2023 in Chimera LinuxIgalia
 
Building a Linux distro with LLVM
Building a Linux distro        with LLVMBuilding a Linux distro        with LLVM
Building a Linux distro with LLVMIgalia
 
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUsturnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUsIgalia
 
Graphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devicesGraphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devicesIgalia
 
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOSDelegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOSIgalia
 
MessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the webMessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the webIgalia
 
Replacing the geometry pipeline with mesh shaders
Replacing the geometry pipeline with mesh shadersReplacing the geometry pipeline with mesh shaders
Replacing the geometry pipeline with mesh shadersIgalia
 
I'm not an AMD expert, but...
I'm not an AMD expert, but...I'm not an AMD expert, but...
I'm not an AMD expert, but...Igalia
 
Status of Vulkan on Raspberry
Status of Vulkan on RaspberryStatus of Vulkan on Raspberry
Status of Vulkan on RaspberryIgalia
 

Mehr von Igalia (20)

A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Building End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPEBuilding End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPE
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Automated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded DevicesAutomated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded Devices
 
Embedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to MaintenanceEmbedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to Maintenance
 
Optimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdfOptimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdf
 
Running JS via WASM faster with JIT
Running JS via WASM      faster with JITRunning JS via WASM      faster with JIT
Running JS via WASM faster with JIT
 
To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!
 
Implementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamerImplementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamer
 
8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa
 
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por IgaliaIntroducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
 
2023 in Chimera Linux
2023 in Chimera                    Linux2023 in Chimera                    Linux
2023 in Chimera Linux
 
Building a Linux distro with LLVM
Building a Linux distro        with LLVMBuilding a Linux distro        with LLVM
Building a Linux distro with LLVM
 
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUsturnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
 
Graphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devicesGraphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devices
 
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOSDelegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
 
MessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the webMessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the web
 
Replacing the geometry pipeline with mesh shaders
Replacing the geometry pipeline with mesh shadersReplacing the geometry pipeline with mesh shaders
Replacing the geometry pipeline with mesh shaders
 
I'm not an AMD expert, but...
I'm not an AMD expert, but...I'm not an AMD expert, but...
I'm not an AMD expert, but...
 
Status of Vulkan on Raspberry
Status of Vulkan on RaspberryStatus of Vulkan on Raspberry
Status of Vulkan on Raspberry
 

Kürzlich hochgeladen

Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 

Kürzlich hochgeladen (20)

Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 

Web applications support on AGL

  • 1. Web applications support on AGL Roger Zanoni Igalia - AGL AMM, 09.03.2023
  • 2. Web applications support on AGL Roger Zanoni, Igalia Agenda ● About ● Web Application Manager ● Exposing system services to web apps ● How to create and debug web applications in AGL ● Status and future plans
  • 3. Web applications support on AGL Roger Zanoni, Igalia About me ● Hi, I'm Roger ● Chromium team at Igalia ● Working on WAM and demo applications on AGL
  • 4. Web applications support on AGL Roger Zanoni, Igalia About Igalia ● Open Source Consultancy with HQ in Galicia, Spain ● 100+ engineers around the world ● Web rendering and browsers experience in Chromium, WebKit, WPE and Firefox, Compilers, JavaScript engines (V8, JSC), Graphics, Multimedia, Kernel, Accessibility ● 2nd main contributor to Chrome, right after Google ● 2nd main contributor to WebKit, right after Apple Web Engines Hackfest Be a part of the Hackfest
  • 5. Web applications support on AGL Roger Zanoni, Igalia WAM WAM = Web Application Manager
  • 6. Web applications support on AGL Roger Zanoni, Igalia WAM WAM = Web Application Manager ● Not framework specific. Any front-end framework allowed.
  • 7. Web applications support on AGL Roger Zanoni, Igalia WAM WAM = Web Application manager ● Not framework specific. Any front-end framework allowed. ● Out-of-the-box compatibility with standard web APIs
  • 8. Web applications support on AGL Roger Zanoni, Igalia WAM WAM = Web Application manager ● Not framework specific. Any front-end framework allowed. ● Out-of-the-box compatibility with standard web APIs ● Built on top of chromium (webosose)
  • 9. Web applications support on AGL Roger Zanoni, Igalia WAM WAM = Web Application manager ● Not framework specific. Any front-end framework allowed. ● Out-of-the-box compatibility with standard web APIs ● Built on top of chromium (webosose) ● Manages webapp life-cycle
  • 10. Web applications support on AGL Roger Zanoni, Igalia WAM WAM = Web Application manager ● Not framework specific. Any front-end framework allowed. ● Out-of-the-box compatibility with standard web APIs ● Built on top of chromium (webosose) ● Manages webapp life-cycle ● CPU usage optimization, status monitoring, memory management
  • 11. Web applications support on AGL Roger Zanoni, Igalia How it works? WAM: an embedded web runtime history for LG webOS and Automotive Grade Linux - FOSDEM 2023, José Dapena
  • 12. Web applications support on AGL Roger Zanoni, Igalia How is it used?
  • 13. Web applications support on AGL Roger Zanoni, Igalia Demo applications
  • 14. Web applications support on AGL Roger Zanoni, Igalia WAM: launching an application libcbe WebOSE Chromium Chromium Web Application Manager applaunchd
  • 15. Web applications support on AGL Roger Zanoni, Igalia WAM: launching an application Browser RenderProcessHost AppServiceDelegateAGL Renderer RenderProcess AGLAppServiceInjection Chromium MPA
  • 16. Web applications support on AGL Roger Zanoni, Igalia webapp: start an app <a class="button" id="app-{{id}}" app-id="{{ id }}" onclick="window.start(this);"> ... </a>
  • 17. Web applications support on AGL Roger Zanoni, Igalia chromium: injection (1) neva/injection/renderer/agl_appservice/agl_appservice_injection.h/cc const char kNavigatorObjectName[] = "navigator"; const char kAppServiceObjectName[] = "appService"; const char kStartMethodName[] = "start"; const char kGetApplicationsMethodName[] = "getApplications";
  • 18. Web applications support on AGL Roger Zanoni, Igalia chromium: injection (2) … AGLAppServiceInjection::CreateAppServiceObject( v8::Isolate* isolate, v8::Local<v8::Object> parent) { gin::Handle<AGLAppServiceInjection> appservice = gin::CreateHandle(isolate, new AGLAppServiceInjection()); parent->Set(isolate->GetCurrentContext(), gin::StringToV8(isolate, kAppServiceObjectName), appservice.ToV8()) .Check(); ... }
  • 19. Web applications support on AGL Roger Zanoni, Igalia chromium: injection (3) v8::Local<v8::String> navigator_name = gin::StringToV8(isolate, kNavigatorObjectName); v8::Local<v8::Object> navigator; gin::Converter<v8::Local<v8::Object>>::FromV8( isolate, global->Get(context, navigator_name).ToLocalChecked(), &navigator); CreateAppServiceObject(isolate, navigator).ToLocal(&app_service); (JS) navigator.appService …
  • 20. Web applications support on AGL Roger Zanoni, Igalia chromium: injection (4) gin::ObjectTemplateBuilder AGLAppServiceInjection::GetObjectTemplateBuilder( v8::Isolate* isolate) { return gin::Wrappable<AGLAppServiceInjection>::GetObjectTemplateBuilder( isolate) .SetMethod(kStartMethodName, &AGLAppServiceInjection::Start) … ; } (JS) navigator.appService.start()
  • 21. Web applications support on AGL Roger Zanoni, Igalia chromium: injection (5) mojo::Remote<pal::mojom::AppService> remote_appservice_; void AGLAppServiceInjection::Start(gin::Arguments* args) { ... remote_appservice_->Start(application_id); }
  • 22. Web applications support on AGL Roger Zanoni, Igalia chromium: dbus,browser void Start(const std::string& application_id) { dbus::MethodCall method_call(kAutomotiveLinuxAppLaunchName, kMethodStart); dbus::MessageWriter writer(&method_call); writer.AppendString(application_id); applaunch_proxy_->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, base::DoNothing()); } neva/pal_service/agl/appservice_delegate_agl.h/cc
  • 23. Web applications support on AGL Roger Zanoni, Igalia applaunchd: webapps export function start(appId) { navigator.appService.start(appId); } <a class="button" id="app-{{id}}" app-id="{{ id }}" onclick="window.start(...);"> ... </a>
  • 24. Web applications support on AGL Roger Zanoni, Igalia Building the HTML5 image ● Getting the AGL code (needs depot_tools and Yocto): ● Configuring the build and creating the image: ● If you want to work on the current release, check the AGL wiki ● Getting started guide repo init -b master -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo repo sync source meta-agl/scripts/aglsetup.sh -f -m <target_architecture> -b build agl-devel agl-demo bitbake agl-ivi-demo-platform-html5
  • 25. Web applications support on AGL Roger Zanoni, Igalia Chromium/WAM Yocto layer ● This fetches and builds the recipes of the meta-agl-demo Yocto layer: ○ WAM https://gerrit.automotivelinux.org/gerrit/gitweb?p=AGL/meta-a gl-demo.git;a=blob;f=recipes-wam/wam/wam_git.bb ○ Chromium https://gerrit.automotivelinux.org/gerrit/gitweb?p=AGL/meta-a gl-demo.git;a=blob;f=recipes-wam/chromium/chromium_git.bb
  • 26. Web applications support on AGL Roger Zanoni, Igalia Flashing the built images ● The generated image will be located at: ● It can be flashed with the following command: ● Then the SD card can be inserted on the device and booted for the first time. build/tmp/deploy/images/<arch>/agl-ivi-demo-platform-html5-<arch>.wic.xz sudo bmaptool copy path/to/arch/agl-ivi-demo-platform-html5-<arch>.wic.xz /dev/mmcblk0
  • 27. Web applications support on AGL Roger Zanoni, Igalia Structure of a webapp ● They can be as simple as: ○ An appinfo.json file that contains metadata such as the application id, title, description, application type, the main file and icon. ○ The source with any of the HTML application resources and a LICENSE file ● There is no dependency of any specific web technology: ○ Pure HTML+JavaScript, WASM ○ Any frameworks or libraries as Enact, AngularJS, React...
  • 28. Web applications support on AGL Roger Zanoni, Igalia Steps for creating a webapp ● Create the new git repository (or local directory) for the new application ○ Add a main html file, all needed resources, etc ● Choose and add a license file ○ It will be needed later when we create the recipe ● Add an appconfig.json file ● Create a Yocto recipe and add it to AGL tree
  • 29. Web applications support on AGL Roger Zanoni, Igalia Example application: Jamendo As an example, let's create an application that simply redirects the user to jamendo.com
  • 30. Web applications support on AGL Roger Zanoni, Igalia appinfo.json { "id": "webapps-jamendo", "title": "JAMENDO", "description": "Free independent music streaming", "version": "0.0.0", "vendor": "Igalia, S.L.", "type": "web", "main": "index.html", "icon": "icon.svg" }
  • 31. Web applications support on AGL Roger Zanoni, Igalia index.html <!DOCTYPE html> <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>Jamendo AGL</title> ... </head> <body> <script> window.location = "https://www.jamendo.com" </script> </body> </html>
  • 32. Web applications support on AGL Roger Zanoni, Igalia Creating the Yocto recipe ● Create a recipe folder in /meta-agl-demo/recipes-demo/ ● Create the recipe file: html5-jamendo_git.bb ● Add the basic information (You can check the glossary for the meaning of each variable, and check Yocto guides): SUMMARY = "Free independent music streaming" HOMEPAGE = "<homepage>" SECTION = "apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=b1e01b26bacfc2232046c90a330332b3" PV = "1.0+git${SRCPV}" S = "${WORKDIR}/git" B = "${WORKDIR}/build"
  • 33. Web applications support on AGL Roger Zanoni, Igalia Creating the Yocto recipe ● Setup the fetcher of the app source: SRC_URI = "git://github.com/rogerzanoni/html5-jamendo;protocol=https;branch=main" SRCREV = "51624ff085bd5d57a7dc4b196bfd567f91766318" ● It's possible to set different kinds of fetchers, for example, setting it up to fetch from a local repository: SRC_URI = "git:///home/<path-to-source-repository>/html5-jamendo;protocol=file;branch=main" SRCREV = "51624ff085bd5d57a7dc4b196bfd567f91766318"
  • 34. Web applications support on AGL Roger Zanoni, Igalia Creating the Yocto recipe ● During development it may be useful to make the recipe skip fetching the source and using a local source directory ● To do so, create a file in your directory: ● Then the option "agl-localdev" need to be passed to aglsetup.sh: local.dev.inc <AGL_ROOT>/build/conf INHERIT += "externalsrc" EXTERNALSRC_pn-<recipe-name> = "/path-to-your-source-dir/" # For instance: # EXTERNALSRC_pn-chromium = "/path-to-the-source-dir/chromium91/" # EXTERNALSRC_pn-wam = "/path-to-the-source-dir/wam/" # EXTERNALSRC_pn-<webapp> = "/path-to-the-source-dir/<webapp>/" source meta-agl/scripts/aglsetup.sh -f -m <target_architecture> -b build agl-devel agl-localdev agl-demo bitbake agl-ivi-demo-platform-html5
  • 35. Web applications support on AGL Roger Zanoni, Igalia Creating the Yocto recipe ● Finally, setup the build and install instructions: inherit pythonnative agl-app AGL_APP_TEMPLATE = "agl-app-web" AGL_APP_ID = "webapps-jamendo" AGL_APP_NAME = "JAMENDO" WAM_APPLICATIONS_DIR = "${libdir}/wam_apps" do_install() { install -d ${D}${WAM_APPLICATIONS_DIR}/${PN} cp -R --no-dereference --preserve=mode,links ${S}/* ${D}${WAM_APPLICATIONS_DIR}/${PN} }
  • 36. Web applications support on AGL Roger Zanoni, Igalia Changing the html5 packagegroup ● The AGL build system needs to know where the new application is to bake it into new images. For that, an entry needs to be added to <AGL root>/recipes-platform/packagegroups/packagegroup-agl-demo-platform-html5.bb ... AGL_APPS = " ... html5-settings html5-aquarium html5-youtube html5-jitsi html5-examples ==> html5-jamendo " ...
  • 37. Web applications support on AGL Roger Zanoni, Igalia Testing the new app on a QEMU image ● After the packagegroup setup, the application should be ready to be build and included in the image. ○ Use "qemux86-64" as architecture and build as described in previous slides ○ Run it with ○ Connect to the running instance using a vnc client runqemu qemux86-64 kvm publicvnc slirp
  • 38. Web applications support on AGL Roger Zanoni, Igalia Testing the new app on a QEMU image
  • 39. Web applications support on AGL Roger Zanoni, Igalia Remote DevTools ● Auto enabled when the image was built with agl-devel, at port 9998 ● To test while running a QEMU image, the network options can be overridden to enable port forwarding by using the following environment variable before running runqemu: export QB_SLIRP_OPT="-netdev user,id=net0,hostfwd=tcp::2222-:22,hostfwd=tcp::9999-:9998"
  • 40. Web applications support on AGL Roger Zanoni, Igalia Remote DevTools
  • 41. Web applications support on AGL Roger Zanoni, Igalia Interacting with services ● The current HVAC AGL demo communicates with kuksa.val ● Clients can use websockets connect to the listening port 8090
  • 42. Web applications support on AGL Roger Zanoni, Igalia Tailwind HVAC demo
  • 43. Web applications support on AGL Roger Zanoni, Igalia Communicating with the server ● Connect to the server using a websocket: var socket = new WebSocket('wss://localhost:8090'); ● After connecting, to be able to use the signals, the client must be authorized: socket.onopen = function(event) { init(); } function init() { authorize(); ... } function authorize() { var data = { action: 'authorize', tokens: <authToken>, requestId: <requestId>, }; socket.send(JSON.stringify(data)); }
  • 44. Web applications support on AGL Roger Zanoni, Igalia Communicating with the server ● <authToken> is the JSON Web Token of your client ○ On real applications each application must have their own tokens, but for development the kuksa.val keys can be used ○ kuksa.val repository provides a doc with more information ● <requestId> is a unique id set by the client and returned by the server in the response ● More info about the protocol can be found in kuksa.val documentation and VISS specs
  • 45. Web applications support on AGL Roger Zanoni, Igalia Subscribing ● After the authentication, the client can subscribe to vehicle signals to receive notifications of value changes: function subscribe(path) { var data = { action: 'subscribe', tokens: <authToken>, requestId: requestId, path: path, }; socket.send(JSON.stringify(data)); } socket.onmessage = function(event) { var jsonData = JSON.parse(event.data); if (jsonData.action == 'get' || jsonData.action =='subscription') { ... } }
  • 46. Web applications support on AGL Roger Zanoni, Igalia Setting/Getting data ● Similar signals can be used to set/retrieve data: function get(path) { var data = { action: 'get', tokens: <authToken>, requestId: <requestId>, path: path, }; socket.send(JSON.stringify(data)); } function set(path, value) { var data = { action: 'set', tokens: <authToken>, requestId: <requestId>, path: path, value: value, }; socket.send(JSON.stringify(data)); }
  • 47. Web applications support on AGL Roger Zanoni, Igalia Sample code ● AGL html5 webapp demos ○ https://gerrit.automotivelinux.org/gerrit/admin/repos/q/filter:html5 ● Jamendo ○ App https://github.com/rogerzanoni/html5-jamendo ○ Recipe https://github.com/rogerzanoni/html5-jamendo-recipe ● Tailwind HVAC demo ○ App https://github.com/rogerzanoni/html5-tailwind-hvac ○ Recipe https://github.com/rogerzanoni/html5-tailwind-hvac-recipe
  • 48. Web applications support on AGL Roger Zanoni, Igalia Ongoing work and future plans ● Upgrade chromium to milestone 94 ● Improve application deployment ● Bring back chromium as an app ● Make it possible to use gRPC on webapps ● Use gRPC to communicate with applaunchd ● Experiment with CEF instead of chromium webosose
  • 49. Web applications support on AGL Roger Zanoni, Igalia CEF ● Easy branch switching, CEF branches are created to track each chromium release milestone ● Eliminate dependency the WebOS release cycle for Chromium updates ● CEF follows chromium release cycle and usually is only one week behind ● Upgrades would be quicker
  • 50. Web applications support on AGL Roger Zanoni, Igalia Thanks Contact: ● José Dapena - jdapena@igalia.com ● Lorenzo Tilve - ltilve@igalia.com ● Roger Zanoni - rzanoni@igalia.com