This document discusses adapting the BoofCV computer vision library for use in GWT applications in the browser. It describes BoofCV and its dependencies like EJML, DDogLeg, and GeoRegression. It details the process of creating GWT adapters for these libraries by adding .gwt.xml files and using super-sourcing to modify classes as needed to work in GWT. Examples are given of using the adapted libraries for interest point detection and association in browser-based applications.
Presentation on Qt Developer Frameworks for a more technical audience, including the changes in version 4.6 and support for Maemo and Symbian mobile platforms.
The QNX Photon MicroGUI was a technological feat in its time. It gained popularity in the mid-1990's when QNX released a 1.44Mb bootable floppy with the QNX Operating System, the Photon GUI, networking, web browser, file browser, and several demo applications.
QNX continued to develop and support Photon through 2014, but as GUI development systems matured — and users' expectations for GUIs increased — Blackberry's QNX is now focusing on the basics of drawing to the screen (e.g. QNX Screen) and left other aspects of Graphical User Interfaces to those who do it best (e.g. Qt)
This presentation would be of particular interest to people looking to upgrade their software from an existing Photon system to Qt. It discusses the differences and similarities between the Photon and Qt application development platforms and how one may migrate from one to the other.
Contributions to an open source project: Igalia and the Chromium projectIgalia
Mario Sánchez Prada explains Igalia's work on several efforts around Chromium and the Web Platform at the 43rd International Conference on Software Engineering (ICSE 2021)
Spanish Industry Case Studies Room
May 23-29, 2021
Presentation on Qt Developer Frameworks for a more technical audience, including the changes in version 4.6 and support for Maemo and Symbian mobile platforms.
The QNX Photon MicroGUI was a technological feat in its time. It gained popularity in the mid-1990's when QNX released a 1.44Mb bootable floppy with the QNX Operating System, the Photon GUI, networking, web browser, file browser, and several demo applications.
QNX continued to develop and support Photon through 2014, but as GUI development systems matured — and users' expectations for GUIs increased — Blackberry's QNX is now focusing on the basics of drawing to the screen (e.g. QNX Screen) and left other aspects of Graphical User Interfaces to those who do it best (e.g. Qt)
This presentation would be of particular interest to people looking to upgrade their software from an existing Photon system to Qt. It discusses the differences and similarities between the Photon and Qt application development platforms and how one may migrate from one to the other.
Contributions to an open source project: Igalia and the Chromium projectIgalia
Mario Sánchez Prada explains Igalia's work on several efforts around Chromium and the Web Platform at the 43rd International Conference on Software Engineering (ICSE 2021)
Spanish Industry Case Studies Room
May 23-29, 2021
Choosing a communication platform is an important decision. From simple two-way communication to complex multi-node architectures, ZeroMQ, the embeddable networking library, helps provide a safe, fast and reliable communication medium.
This webinar will give you an overview of the ZeroMQ architecture, explaining the advantages and exploring usage patterns and cross-platform capabilities. We'll also go through examples of the patterns using different languages, including C++, Swift, Python and C.
ICS is excited to bring you our summer webinar series that will introduce you to the Qt framework. In part I we will cover the steps of getting you started with your first Qt application. We will explore how to start a project, how to build, where to find answers when you need them, what license issues you need to be aware of, and mostly how to have fun with it.
Next Generation Hybrid Applications with Qt - presentation for SEE 2009Nokia
Presentation for http://www.see2009.org/, held in 26.10.2009.
Shows how web developers can utilize their web development skills in native applications with Qt.
Explains how to install Necessitas (Qt for Android), how to use it, and how to publish to the Android Market. Based on Necessitas 0.3 (3rd alpha)
Slides are from Qt Developer Days 2011 in San Fransisco
Software Development Best Practices: Separating UI from Business LogicICS
One of the most effective software engineering approaches involves separating the user interface (frontend) from the business logic (backend), especially when it comes to developing embedded-devices. This practice makes it far easier to code for a single specific functionality versus coding an overall product.
In this webinar we’ll explain not only what’s involved in separating the UI from business logic in your next Qt project, but explore some of the key benefits of this approach, including:
Parallel development
Modularity
Enhanced testability
Accelerated development
Architecture that easily accommodates future changes
We’ll also touch on a few of the drawbacks, chief among them the need to implement new strategies for independent testing, build and deployment — tasks that take extra time and resources
An Introduction to the Yocto Embedded Framework 2018ICS
The Yocto Project® is a collaborative Open Source project that provides templates, tools and methods to help create custom Linux-based systems for embedded products, regardless of the hardware architecture. It was founded in 2010 as a collaboration among hardware manufacturers, open-source operating systems vendors, and electronics companies to help standardize embedded Linux development.
This webinar will:
Present an introduction to the Yocto framework, starting with an overview of Yocto including its advantages and limitations as compared to other approaches for building an embedded Linux image.
Describe the major components of Yocto, including what it provides and the tools and components it offers to create embedded Linux systems. An example will be given of creating a Yocto image for the Beaglebone, a low-cost ARM development board. The steps will include building the OS image, creating an SDK for cross-compilation, and deploying the image to the board.
Introduce key tools including bitbake and its related configuration files as well as the graphical "toaster" tool. The development platform used will be a Linux-based desktop system.
Provide suggestions on how to get started using Yocto and a list of references to more information including web sites and published books.
Attendees will gain a good overall understanding of what Yocto provides, the advantages it offers, and the basic process for using it to create an embedded Linux distribution. No previous experience with Yocto will be assumed, although a general understanding of embedded systems development is useful.
Biscuit: an operating system written in goSeongJae Park
Biscuit is a monolithic operating system kernel that is written in Go. This talk introduces the kernel and demonstrate how to build, install, and analyze the code.
Case Study: Using Qt to Develop Advanced GUIs & Advanced Visualization Softwareaccount inactive
DAZ 3D strives to bring 3D art to the masses by delivering the highest quality 3D digital content and software at the most affordable prices. DAZ Studio is a free, feature rich 3D figure design and 3D animation tool that enables anyone to create stunning digital imagery. This is the perfect tool to design unique digital art and animation using virtual people, animals, props, vehicles, accessories, environments and more. In April of 2004, DAZ started the Public Beta release stage of development for DAZ Studio after two years of development. In June 2009, DAZ Studio v3.0 was released both as a free version and a monetized advanced version. This presentation will explain why Qt was originally selected, what benefits have been realized from it’s use in DAZ Studio, and what DAZ 3D’s experience has been in porting there app from Qt3.3 to Qt4.5. Specific topics will include scripting implementation, cross-platform compatibility, UI versatility, upgrade porting issues/experiences, benefits of the 4.5 opensource version, and styling benefits.
Presentation by Tyson Ratliff and Jarom Schow held during Qt Developer Days 2009.
http://qt.nokia.com/developer/learning/elearning
Convert Your Legacy OpenGL Code to Modern OpenGL with QtICS
See the full Video here: http://bit.ly/modern-open-gl-qt
Back by popular demand, we invite you to another informative webinar on OpenGL, a powerful, low-level graphics toolkit allowing access to accelerated GPU and hardware. Learn the many aspects of OpenGL development where Qt provides advanced interfaces to let developers focus on tasks instead of dealing with repetitive and error-prone, platform dependent issues.
This revised version the OpenGL webinar from last summer, will present information on the differences and the upgrade possibilities available for Qt-OpenGL applications converting from Qt 4x to Qt 5. In addition, we will touch upon best practices when converting legacy, fixed pipeline applications to modern OpenGL using Qt5.
In this webinar (Part IV) we explore how to implement UI and UI behavior with traditional widgets as opposed to QML. As we create a simple widgets applications we will point out the differences with Qt Quick and give rules of thumb of which one to use for a particular project.
Qt App Development - Cross-Platform Development for Android, iOS, Windows Pho...Andreas Jakl
How to create a cross-platform native app? What is Qt and which platforms does it support?
Get the latest information on the open source, C++ based framework that lets you target Android, iOS and Windows Phone - plus desktop and embedded platforms! Also contains info on contained UI technologies, the Qt dual-licensing model and the roadmap.
Choosing a communication platform is an important decision. From simple two-way communication to complex multi-node architectures, ZeroMQ, the embeddable networking library, helps provide a safe, fast and reliable communication medium.
This webinar will give you an overview of the ZeroMQ architecture, explaining the advantages and exploring usage patterns and cross-platform capabilities. We'll also go through examples of the patterns using different languages, including C++, Swift, Python and C.
ICS is excited to bring you our summer webinar series that will introduce you to the Qt framework. In part I we will cover the steps of getting you started with your first Qt application. We will explore how to start a project, how to build, where to find answers when you need them, what license issues you need to be aware of, and mostly how to have fun with it.
Next Generation Hybrid Applications with Qt - presentation for SEE 2009Nokia
Presentation for http://www.see2009.org/, held in 26.10.2009.
Shows how web developers can utilize their web development skills in native applications with Qt.
Explains how to install Necessitas (Qt for Android), how to use it, and how to publish to the Android Market. Based on Necessitas 0.3 (3rd alpha)
Slides are from Qt Developer Days 2011 in San Fransisco
Software Development Best Practices: Separating UI from Business LogicICS
One of the most effective software engineering approaches involves separating the user interface (frontend) from the business logic (backend), especially when it comes to developing embedded-devices. This practice makes it far easier to code for a single specific functionality versus coding an overall product.
In this webinar we’ll explain not only what’s involved in separating the UI from business logic in your next Qt project, but explore some of the key benefits of this approach, including:
Parallel development
Modularity
Enhanced testability
Accelerated development
Architecture that easily accommodates future changes
We’ll also touch on a few of the drawbacks, chief among them the need to implement new strategies for independent testing, build and deployment — tasks that take extra time and resources
An Introduction to the Yocto Embedded Framework 2018ICS
The Yocto Project® is a collaborative Open Source project that provides templates, tools and methods to help create custom Linux-based systems for embedded products, regardless of the hardware architecture. It was founded in 2010 as a collaboration among hardware manufacturers, open-source operating systems vendors, and electronics companies to help standardize embedded Linux development.
This webinar will:
Present an introduction to the Yocto framework, starting with an overview of Yocto including its advantages and limitations as compared to other approaches for building an embedded Linux image.
Describe the major components of Yocto, including what it provides and the tools and components it offers to create embedded Linux systems. An example will be given of creating a Yocto image for the Beaglebone, a low-cost ARM development board. The steps will include building the OS image, creating an SDK for cross-compilation, and deploying the image to the board.
Introduce key tools including bitbake and its related configuration files as well as the graphical "toaster" tool. The development platform used will be a Linux-based desktop system.
Provide suggestions on how to get started using Yocto and a list of references to more information including web sites and published books.
Attendees will gain a good overall understanding of what Yocto provides, the advantages it offers, and the basic process for using it to create an embedded Linux distribution. No previous experience with Yocto will be assumed, although a general understanding of embedded systems development is useful.
Biscuit: an operating system written in goSeongJae Park
Biscuit is a monolithic operating system kernel that is written in Go. This talk introduces the kernel and demonstrate how to build, install, and analyze the code.
Case Study: Using Qt to Develop Advanced GUIs & Advanced Visualization Softwareaccount inactive
DAZ 3D strives to bring 3D art to the masses by delivering the highest quality 3D digital content and software at the most affordable prices. DAZ Studio is a free, feature rich 3D figure design and 3D animation tool that enables anyone to create stunning digital imagery. This is the perfect tool to design unique digital art and animation using virtual people, animals, props, vehicles, accessories, environments and more. In April of 2004, DAZ started the Public Beta release stage of development for DAZ Studio after two years of development. In June 2009, DAZ Studio v3.0 was released both as a free version and a monetized advanced version. This presentation will explain why Qt was originally selected, what benefits have been realized from it’s use in DAZ Studio, and what DAZ 3D’s experience has been in porting there app from Qt3.3 to Qt4.5. Specific topics will include scripting implementation, cross-platform compatibility, UI versatility, upgrade porting issues/experiences, benefits of the 4.5 opensource version, and styling benefits.
Presentation by Tyson Ratliff and Jarom Schow held during Qt Developer Days 2009.
http://qt.nokia.com/developer/learning/elearning
Convert Your Legacy OpenGL Code to Modern OpenGL with QtICS
See the full Video here: http://bit.ly/modern-open-gl-qt
Back by popular demand, we invite you to another informative webinar on OpenGL, a powerful, low-level graphics toolkit allowing access to accelerated GPU and hardware. Learn the many aspects of OpenGL development where Qt provides advanced interfaces to let developers focus on tasks instead of dealing with repetitive and error-prone, platform dependent issues.
This revised version the OpenGL webinar from last summer, will present information on the differences and the upgrade possibilities available for Qt-OpenGL applications converting from Qt 4x to Qt 5. In addition, we will touch upon best practices when converting legacy, fixed pipeline applications to modern OpenGL using Qt5.
In this webinar (Part IV) we explore how to implement UI and UI behavior with traditional widgets as opposed to QML. As we create a simple widgets applications we will point out the differences with Qt Quick and give rules of thumb of which one to use for a particular project.
Qt App Development - Cross-Platform Development for Android, iOS, Windows Pho...Andreas Jakl
How to create a cross-platform native app? What is Qt and which platforms does it support?
Get the latest information on the open source, C++ based framework that lets you target Android, iOS and Windows Phone - plus desktop and embedded platforms! Also contains info on contained UI technologies, the Qt dual-licensing model and the roadmap.
The WebKit project (LinuxCon North America 2012)Igalia
By Juan José Sánchez Penas.
WebKit is a popular open source web rendering engine (HTML, JavaScript, CSS) with a generic part (WebCore, JS Engine), and 'ports' for specific platforms which implement bits like rendering, networking or multimedia. The WebKit community is interesting: companies & individuals cooperate successfully to evolve a complex codebase. Given the popularity of HTML5 and web technologies, WebKit is one of the most important open source projects. Our WebKit team at Igalia maintains the WebKitGTK+ port and contributes to WebCore, JSC, V8 & other ports (EFL, Clutter, Qt), being the top committers after Google&Apple. In this talk, we will review the past&present&future of the project, will explain how to interact with it, how to create or maintain ports, and other details very useful for those who in one way or another use or depend on WebKit.
Add the power of the Web to your embedded devices with WPE WebKitIgalia
The Web engine is the most important component of a Web Browser: it makes it possible to fetch and interpret web content, allowing users to interact with it. WebKit, the Open Source Web engine used in Web browsers like Safari, provides an architecture particularly well-designed for embedded platforms, making it popular not just for Apple devices, but for all sorts of Linux-based environments too (e.g. set-top-boxes, smart home appliances..). However, a Web engine is a complex piece of software and often not optimized for low-power computers.
This is where WPE, a Linux-based Open Source “port” of WebKit for embedded devices, comes in. Its low memory footprint and focus on simplicity, flexibility, and performance allows for the kind of customization needed to run on bespoke hardware and integrate with a wide variety of requirements. WPE is also developed upstream as part of the WebKit project and regularly published every 6 months via stable releases, guaranteeing that it’s up-to-date with the latest developments in the WebKit community.
In this talk, we will explore WPE in detail, see how the project has evolved, and look at where it’s heading next, highlighting some of its most popular use cases and some experiments that open up brand-new possibilities for this port of WebKit.
(c) Embedded Recipes 2023
5th Edition
September 2023, 28 to 29
Paris - France
https://embedded-recipes.org/2023/
https://www.youtube.com/watch?v=rdiETUGD6dg
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutio...Igalia
By Juan José Sánchez Penas.
WebKit is a web rendering engine (HTML, JavaScript, CSS) with a generic part (WebCore, JSEngine), and 'ports' for specific platforms that implement bits like rendering, networking or multimedia. In the WebKit community, companies&individuals cooperate to evolve a complex codebase. Given the popularity of HTML5 and web tech, WebKit is a key open source project. About 10 months ago, Google announced Blink, a fork of WebKit which attracted many former WebKit contributors. Igalia's Browsers team maintains the WebKitGTK+ port and is top contributor to WebCore, JSC, V8, other ports (EFL, Clutter, Qt), and Blink. The talk will review the past/present/future of WebKit/Blink, their dynamics and development process, , the relationship with the Linux ecosystem, and will give information about how to contribute to or use both projects. Not very technical. Valid both for developers & managers.
Sascha Corti
With Internet Explorer 9, Microsoft has entered the league of HTML 5 browsers and with its active participation in the W3C working groups, the company proves its engagements towards the new and emerging standards. Developers however are often left wondering where the boundaries are drawn between HTML5 web site, plug-in based rich internet application and smart client or “app”.
This session intends to answer this question and uses many examples to show you some of the most important enhancements introduced by HTML5, CSS3, SVG, DOM, WOFF and ECMA script. You will learn now the standards are still evolving and how Microsoft is contributing.
http://soft-shake.ch/2011/conference/sessions/microsoft/2011/09/06/introduction-to-html5.html
First day of slides for @GAFFTA workshop http://www.gaffta.org/2012/07/24/hacking-the-kinect-with-openframeworks/
Part 1 of the live stream : http://www.youtube.com/watch?v=WXfy8Cuje-0&feature=plcp
Part 2 of the live stream :
http://www.youtube.com/watch?v=I80FsOlMPj8&feature=plcp
2. Alberto
Software Developer &
Linux Sysadmin
C/C++ ( since 80’s :/ )
GWT ( since 1.6 )
Javascript & Java
alberto@jooink.com
+AlbertoMancini
3. Francesca
Web and mobile developer,
software engineer and
architect
C/C++, CFD, HPC
GWT since 2009
“with a passion for clean code and
fine tuned details”
francesca@jooink.com
@francescatosi
+FrancescaTosi
4. Devfest’s CodeProject
A couple of years(**)
ago we started working on a
pet project trying to explore how mixing modern
WebAPIs and an effective programming approach(*)
can enable us to develop complex client-side
applications running in a browser.
(*)
read: GWT, i.e. a typed language compiled into js
(**)
for the 2012’s GDG DevFest season
7. I Mean ...
C’mon we are in 2015:
browsers are certainly
more than enough
for any kind of application !
GoogleDocs, Inbox, Plus, Scala vm in js, JsDOSBox…
8. BETting
The right tool(*)
is enough to let us to
develop
- complex
- compute-intensive
browser-based applications ?
(*)
GWT of course :)
9. The RIGHT TOOL
Should (at least) let us:
● master the (quite tricky) web platform
● code safely … in a type-safe language
(but provide native-like flexibility and performance)
● reuse existing code
… and of course produce a fast and reliable application
11. Target
We were working on Augmented Reality and we had an
expertize on it so we started trying to realize an
AR webApp in order to show that this kind of
applications is way too-complex for the performance
of a browser.
13. Marker Based AR
Essentially composed of 3 steps
● Marker detection and identification
(finding the marker in a picture)
● Computation of the marker pose
(det. six degrees of freedom w.r.t camera, f.i.)
● Syntetic objects collocation
(object space to camera space transf)
15. NyARToolkit, do not reinvent the wheel
NyARToolKit
is an ARToolKit
built with
100% pure Java.
[great
performance,
featurefull, GPL]
http://nyatla.jp/nyartoolkit/wp/
16. GWT-NyARToolkit
… given an image we get a 3x4 (3x3 + a
translation vector actually) matrix that
identifies the marker in the camera space
nyar.update(i_sensor); ← ‘push’ an image
found = nyar.isExistMarker(marker_id); ← query if a marker is detected
mm = nyar.getMarkerMatrix(marker_id); ← compute the collocation matrix
https://code.google.com/p/gwt-nyartoolkit/
http://jooink.blogspot.com
25. WebRTC with GWT
GWT (Elemental at the beginning)
At the beginning elemental, but right now (using
jnsi and now jsinterop) we are able to do all the
operation without dependencies GWT.
https://code.google.com/p/elemental-getusermedia-demo
https://github.com/jooink/gwt-getusermedia
26. Browser Based AR
<video/>
the video stream
can (has to be) be played in a <video/> tag
“native” (jsni)
video.src = URL.createObjectURL(stream);
32. WebGL
We had to reinvent the wheel :(
three.js, BabylonJS
parallax (GWT !)
awesome shading rendering and lighting
tend to mix webgl-interaction with 3D graphics
44. Computer Vision
Computer Vision
As told by Alberto, after a while we needed to have
some more complex features on this tool for image
recognition, in order to have more information on
the image we are working with.
46. Computer Vision
Computer Vision
There exists a lot of CV libs (complete, tested and
fine tuned) for example:
- OpenCV
- VLFeat
- VLX
- …
- BoofCV
C/C++
Java
47. Computer Vision
Computer Vision by BoofCV
There is a great library for Computer Vision
interely written in Pure Java: BoofCV → we decided
to adapt BoofCV for GWT.
48. BoofCV
BoofCV is a complete & complex project
BoofCV is an opensource Java library for computer
vision & robotics applications.
BoofCV is organized into several packages:
image processing, features, geometric vision, calibration,
recognition, visualize and IO.
49. BoofCV
Written by Peter Abeles
www.boofcv.org
Link to the source code:
https://github.com/lessthanoptimal/BoofCV
50. BoofCV
Adapting an entire big & complex
library is not is a funny game.
BoofCV depends on other Java libs, so we must adapt
all the dependencies
51. BoofCV
- DDogLeg: Java numerical lib for
non-linear optimization, robust
model-fitting, polynomial root
finding, sorting and more;
- GeoRegression: open source java
geometry lib for scientific
computing;
- EJML: dense matrix linear
algebra library written in Java
53. EJML
- EJML:
dense matrix linear algebra library written in
Java
https://github.com/lessthanoptimal/ejml
54. GWT-EJML
GWT-EJML
is an adapter-project around EJML that let us to use
the original library:
- provides .gwt.xml files
- supersources many classes
- contains running examples
57. GWT-EJML
.gwt.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.7.0
//EN"
"http://gwtproject.org/doctype/2.7.0/gwt-module.dtd">
<module rename-to='gwtejml'>
<inherits name='org.EJML'/>
...
<super-source path="jre" />
...
</module>
58. GWT-EJML
The Strategy
we decided to use the SuperSourcing in order to
change/adapt the class of the basic lib and leave
the ejml project unchanged
→ the maintainability is easier
59. GWT-EJML
SuperSourcing
We added the super source path in the gwt.xml config
file
<super-source path="jre" />
and we created the file to modify in that directory
(using the right path of the file in the main
project).
60. GWT-EJML
.gwt.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.7.0
//EN"
"http://gwtproject.org/doctype/2.7.0/gwt-module.dtd">
<module rename-to='gwtejml'>
<inherits name='org.EJML'/>
...
<super-source path="jre" />
...
</module>
61. GWT-EJML
Supersourced parts of JRE
java.io.ByteArrayOutputStream
public class ByteArrayOutputStream extends OutputStream {
public ByteArrayOutputStream() { … }
public void write(int arg0) { … }
}
62. GWT-EJML
Supersourced parts of EJML
org.ejml.ops.MatrixIO;
public class MatrixIO { … }
org.ejml.alg.dense.decomposition
.eig.symm.SymmetricQREigenHelper
org.ejml.alg.dense.decomposition
.svd.implicitqr.SvdImplicitQrAlgorithm
java.io.
PrintStream
printf()
63. GWT-EJML
Supersourced parts of EJML
java.io.PrintStream does not have printf() in the
gwt emulated jre
We could not supersource the PrintStream because
already exist on emulated jre and we cannot super-
sourcing just a method.
77. BoofCV
GWT-BOOFCV:
● Reflection:
○ used mostly to handle Arrays of primitive
types
○ probably unneeded upstream
working with Peter to understand if can be
avoided through, for instance, a few of
factories.
● Image managment
80. BoofCV
Image managment:
of course we had to work-out the different point of
view about Images:
Browser → (<img/> <video/>)
BoofCV → array of values
→ we used <canvas/> (also in this case);
canvas.getContext2d().getImageData( … );
85. Questions? Contact us :
Francesca Tosi
R&D at Jooink Team
francesca@jooink.com
Alberto Mancini
Dev at Jooink Team
alberto@jooink.com
Thanks !
Please rate this presentation http://gwtcreate.com/agenda