Welcome to episode 1 of my newsletter Burkhard on Qt Embedded Systems. My resolution for 2020 is to write this newsletter monthly – for a long long time. If you want to receive my newsletter by email at the end of each month, fill out the subscription form in the sidebar right (on mobile devices, after the posts). Or, follow this link to fill out the subscription form.
I wish you a wonderful and successful year 2020!
My Blog Posts
Safe-Guarding the (L)GPL Future of Qt. The non-profit KDE Free Qt Foundation ensures that all modules of Qt Essentials and many Qt Add-Ons will stay available under LGPL in the future. If The Qt Company does not release a Qt version with significant changes every 12 months, the Foundation has the right to publish Qt Essentials, many Qt Add-Ons and Qt Contributions under the BSD license. As Qt 6 is around the corner, the contract between The Qt Company and the Foundation is up for renegotiation. The Foundation has a veto right against changes to the contract and hence against license changes. Many companies and people (including me) benefit from Qt under (L)GPL and from the work of the KDE Free Qt Foundation. So, let us support the Foundation with donations.
My three most popular posts written in 2019 are:
- Yocto Builds with CROPS Containers and Using Docker Containers for Yocto Builds. I used to install in a virtual machine all the packages required to run a Yocto build. This was cumbersome, error-prone and time-consuming. The CROPS Docker container gives you the installation right out of the box. Yocto builds in a Docker container are nearly as fast as on a native computer. They are considerably faster than Yocto builds in virtual machines.
- Comparing Two Floating-Point Numbers: Although some people found my tweet at the time too clamorous, it summarises the post best: Comparing two floats with == or !=: rubbish! Checking whether two floats are close to each other: still rubbish! Even Qt’s qFuzzyCompare misses simple cases.
- Safe-Guarding the (L)GPL Future of Qt: The post is only 10 days old! It seems to hit a nerve: Many people want Qt to stay free and open-source in the future. See the summary above.
Amazon, Apple, Google and the Zigbee Alliance formed a working group Connected Home over IP (CHIP). CHIP plans to standardise the communication of home devices on the application layer. The use of an IP-based protocol aims at breaking the silos created by different radio standards like Zigbee, Z-Wave, Thread, Bluetooth, Wifi and Ethernet. Home devices from different manufacturers using different radio standards should be able to talk to each other in the future. For me, CHIP sounds very much like OPC UA for industrial automation. Stacey Higginbotham makes some informed guesses about CHIP and hopes that CHIP is the smart-home standard that will finally stick.
Qt for MCUs 1.0 is now available. This first release of Qt for MCUs brings QML HMIs to microcontrollers like the NXP i.MX RT1050 and the STM32F769NI (both with ARM Cortex-M7s). The Qt Company created a new QML rendering engine, Qt Quick Ultralite, for microcontrollers. Many improvements of Qt Quick Ultralite will find their way into the QML rendering engines of Qt 5.15 and Qt 6. Simon Hausmann’s fantastic talk Qt for MCUs – A Deep Dive at Qt World Summit 2019 shows you how to run QML HMIs on microcontrollers bare-metal or with a simple RTOS.
The videos of all talks at Qt World Summit 2019 are online now. My three favourite talks were:
- Nathalie Nahai, The Psychology Behind Great User Experience (keynote). Although Qt’s main goal is to build HMIs, most talks at Qt World Summit are about Qt as a technology – from developers for developers. Nathalie reminds us Qt developers to pay more attention to how to make users’ lives easier or more fun and how to guide users to the places in the HMI (e.g., the Buy button) where we want them to go. Her keynote was the best I have ever attended at a Qt event. Don’t miss her podcast The Hive and her books.
- Simon Hausmann (The Qt Company), Qt for MCUs – A Deep Dive. Simon is hands-down the best Qt speaker I know. Just watch the video and learn how to integrate the Qt event loop into the main loop of a bare-metal system running on a microcontroller. His talk is the foundation to all the other talks about Qt for MCUs.
- Frank Meerkötter (Basyskom), Industrial Automation Out of the Box – Qt OPC UA. Frank succeeded in the nearly impossible. In 45 minutes, he gave the audience a fair idea of OPC UA and explained the Qt code for communicating with a machine over OPC UA.
VW desperately looking for software experts (in German). VW wants to ramp up its Car-IT to 10,000 people within the next five years, while investing 7 billion Euros. VW recognises software as a core product, which it will contract out to suppliers less and less. Currently, VW develops 10% of the car software on its own. In 2025, it wants to develop 60% in-house. In 2020, VW plans to hire 2500 experts worldwide. I don’t think that VW will solve its problems by throwing ever more people at these problems. It should slash its model zoo (how many models do Tesla or Apple have?) and hire fewer but better developers. VW will not attract many good, let alone top developers, because it forces developers to move to terrible locations like Wolfsburg and Ingolstadt (why not allow remote work!) and gives them only tiny areas of responsibility. This problem is not specific to VW but pervasive with most car OEMs and suppliers.
When I try to convince developers of ECUs, communication protocols or firmware to use test-driven development (TDD) or at least to test their software, many of them answer: “Nice idea but not possible for my kind of software”. Sorry, wrong answer! Phillip Johnston shows how to find, fix and test a firmware bug without hardware. He and his client used TDD to implement a protocol for pagers. He was able to fix the bug without ever powering up the hardware. He wrote a failing test demonstrating the bug and made the test working. This fixed the bug.
Quanta Magazine has a fascinating interview with Barbara Liskov. We owe her data abstraction and the Liskov substitution principle. She received the Turing Award in 2008. Barbara Liskov had to fight hard against the old boys networks and prevailed. For me, she is a role model for women in tech.
When I introduced the version control system git to my latest customer, I noticed that my git knowledge had collected a bit of dust. In version 2.23, the multiple responsibilities of
git checkout were separated into the two commands
git restore and
git switch– as described here. The post Start Using Git on the Command Line Like a Pro in Five Minutes gives a quick overview of basic git commands like
commit that you use heavily in your daily work. If you inevitably mess up things, Joshua Wehner shows you How to undo (almost) anything with Git. Joshua’s tips helped me numerous times.
When you start a new project, you’ll have to decide about the git branching model. The search engines lead you to the post A successful Git branching model by Vincent Driessen. Developers work in their separate feature branches. They integrate their work only after days or even weeks (often only once at the end of a Sprint). The integration costs are unnecessarily high. The high integration costs are Jussi Judin’s main criticism in his post A succesful Git branching model considered harmful. He suggests to use trunk-based development, where developers integrate their changes regularly and often into the common master branch. Branches are never merged back into the master branch. This way of working supports continuous integration and leads to a much simpler branching model. I agree with Jussi that trunk-based development should be used for agile software development projects.
As a solo consultant, I work on different projects. These projects require different versions of the C and C++ compilers. If I want to try out the latest features of C++17, I also need a different compiler version. This post describes how to switch between multiple GCC and G++ compiler versions on Ubuntu. The solution relies on Ubuntu’s
update-alternatives command. By the way, the same command helps you to switch between different Python versions (see here).