Recently, I brought up Qt 5.5 on a Freescale i.MX35, which has an ARM11 CPU but no OpenGL support. Despite the missing OpenGL, I wanted to write the HMI with QML. The additional challenge was that the cross-compilation toolchain was 32-bit, but I wanted to use my standard 64-bit Ubuntu. I’ll show in this post how to set up the 32-bit toolchain and rootfs on my 64-bit Ubuntu machine, how to configure and build Qt 5.5 from the sources, and how to run a hello-world application written in QML on the i.MX35.Read More »Running a QML HMI on an ARM11 without OpenGL
I’ll explain how a beacon-enabled museum guide app uses an instance-based classification algorithm – a k nearest-neighbour algorithm – to locate one out of many exhibits in a room. Before diving into the details of the k nearest-neighbour algorithm, I argue why the obvious algorithm of choosing the beacon with minimum distance from the phone isn’t good enough and why we need a cleverer algorithm.
Read More »Solution Overview – Beacon-Enabled Museum Guides
When you enter a museum, your phone starts the guide app of the museum automatically. When you look at an exhibit in the museum, the app starts playing the audio commentary of this exhibit. The app provides additional information like web links, videos, photos and texts. When you take photos, the app adds the photos as additional information to the exhibit you are looking at. When you finally reach home, you have your personalised museum guide and you can relive your tour through the museum whenever you want. This is the kind of experience you should expect in 2016.
Read More »Motivation – Beacon-Enabled Museum Guides
We have a custom Swift type that can be used as the key type of dictionaries. We want to make an instance property of this type key-value observable as well. How do we do that?
Read More »Making a Hashable Type Key-Value-Observable
When beacon ranging is active on your iPhone, apps can subscribe to regular updates of the beacons in range. I’ll show you how to set up beacon ranging such that apps receive these updates both in the foreground (easy) and in the background (not so easy).
Read More »Beacon Ranging in the Background
In my previous post, I have shown how to use scaling to adapt QML HMIs to different screen sizes and formats. We reach the limits of scaling if we must change the structure of the HMI or if the HMI must be pixel-perfect. The solution to these problems is to provide a different implementation for each screen size. Switching between these different implementations is done with QML file selectors.
Read More »Responsive QML HMIs with File Selectors
The HMIs of in-vehicle infotainment systems, TVs, phones and many other systems must adapt to different screen resolutions and formats. This adaptation should happen with as little duplicate effort as possible. The simplest way of doing this for QML HMIs is to scale the values of all
border properties in proportion to a reference resolution. Based on the HMI of a music player, I’ll show you how to do this by changing only the screen width and height. Read More »Responsive QML HMIs with Scaling
Over the last 1.5 years, I worked with two Western automotive tier-1 suppliers who use near- and far-shoring to develop most parts of their infotainment systems. Both suppliers use offshoring to reduce their development costs. But how can these offshoring projects be cheaper if a good developer is easily 10-20 times more productive than an average developer?
Read More »Offshoring Must Be About Finding Good Developers