These tips won’t be any surprise for most professional software engineers. But if you’re just getting started it can be a handy reminder. If you’re not already doing everything here, you should be.
by Milian Wolff | Senior Software Engineer, KDAB
While some methodologies, workflows, and tools are specific to an individual domain, many are applicable regardless of whether you’re developing a web service, embedded device, mobile app, or desktop application. Here are a few of those general best practices that we believe are widely applicable to most development projects.
by Nathan Collins | Senior Software Engineer, KDAB
Unlike a lot of modern development, embedded development is close to the hardware. It runs on specialized boards, uses custom testing harnesses, requires expensive debugging equipment, and has its own characteristic workflows. That hardware dependency makes embedded development unique. Here are a few of the best practices that we try to use in our embedded development projects.
by David Faure | Managing Director KDAB France
While desktop development shares a lot of best practices with other types of software, a few things make it stand apart. Development of an application that sits on a user’s desktop, no matter what that consists of, requires a flexible design. Desktop applications are bigger than programs for embedded and IoT and they demand an architecture more complex than server or cloud apps with their tightly controlled environments. Here are some of our best practices for building these complex desktop applications.
by Jan Marker | Senior Software Engineer, KDAB
In a modern software development process, continuous integration (CI) and continuous deployment (CD) plays a vital role. However, implementing CI/CD within an organization can be challenging. Due to the need for customization to align with specific work products and workflows, it often requires some trial and error. To help you minimize needless dead-ends, we’ll share some of our hard-won advice on using and configuring CI/CD systems, as well as explain why you should be using CI/CD if you’re not already.
by Andreas Holzammer (KDAB), Leon Matthes (KDAB), Lieven Hey (KDAB) and Eystein Stenberg (Mender)
When building an application distributed through the Google or Apple app stores, much of the heavy lifting in delivering updates is handled for you. However, there are many circumstances where these consumer app stores don’t apply: embedded devices, industrial desktop applications, and dedicated-use tablets, among others. If you’re building one of these systems, your software will necessarily live outside of these app stores. So how do you design and build a system that can effectively deliver and update your software?
by Andrew Hayzen (KDAB), Leon Matthes (KDAB), Florian Gilcher (Ferrous Systems)
As a modern programming language, Rust has benefitted from lessons learned from earlier established languages like C and C++. As a result, it has been designed to avoid many common programmer errors. However, while an all-Rust approach might work for very small bare-metal embedded systems or fully isolated microservices, it doesn’t instantly retire the vast amount of existing code in most company’s code bases. For the foreseeable future, most developers realize a more nuanced stance is necessary, one that harmoniously blends Rust with existing C and C++ libraries.
– by Nathan Collins | Senior Software Engineer, KDAB
If your company is building its first embedded Linux device, you’re going from a relatively easy-to-understand product environment to one that’s software-dependent with thousands of technical decisions to make. Nobody wants the expensive mistake of a failed product, but without previous experience, how do you go about creating an embedded system that is not only successful with customers but also a solid foundation for future innovation?
The most difficult decision you’ll make when creating your first embedded Linux device has nothing to do with software; it’s about the hardware. While it is possible to do a software upgrade mid-development without massive disruption and waste, attempts to make such changes in hardware development come at a much higher cost. So, you need to make some important decisions upfront about which CPU, board, and peripherals you want to use in your embedded Linux device.
Deciding on the various software components in your stack is a crucial step when creating your first embedded Linux device. You want to build a stack that meets your objectives now and brings continued value in the future. However, there are so many tools you can combine to build and maintain a successful product, it can be difficult to know where to start.
Before creating your first embedded Linux device, you need to determine how you want to build your software. After all, the tools and development processes for embedded Linux may be quite different from what you’re used to with smaller microcontroller-based or bare-metal systems. If you want a well-designed, easy to maintain, and cost-effective solution, take the time to research your options and keep in mind the following key considerations.
– Andrew Hayzen
Containers are an amazing tool for modern software development that can dramatically simplify many challenging problems. But is there more to discuss besides what we already covered in our Containers in Embedded whitepaper? Why, yes there is.
This is the quick guide to all the ways containers can improve our lives as developers. It assumes that you’re already familiar with the technology through tools like docker, but please read our other whitepaper first if you need a primer.
– Giuseppe D’Angelo and Ivan Čukić
If you’re a C++ programmer, it probably won’t have escaped your attention that the C++20 standard has been released and is supported (in great part) by the most popular compilers like GCC, Clang, MSVC, and Apple Clang. We’re excited by this not only because we love C++ and because many of us at KDAB are language standards wonks, but because it provides some of the most revolutionary changes to the language since the ground-breaking C++11 release. C++20 provides C++ with even more power and expressiveness, and levels the playing field between this veteran workhorse language and newer upstarts.
With contributions from Matthias Kalle Dalheimer, Jon Kalb, Ivan Čukić and Jens Weller
We talked to a panel of C++ experts, evangelists, and devotees to understand more about C++, its current position, its history, and its future.
– Matthias Kalle Dalheimer
If your company produces physical products, you might think that your most important asset is the in-depth experience acquired in your field, your loyal customer base, or your top-notch manufacturing facilities.
However, over and over again, industry giants in many fields have been toppled by Silicon Valley start-ups and game-changing innovations. When a software-savvy competitor enters your market, they provide new benefits that win over your customers. That leaves you in a game of catch-up to regain market share and re-establish your brand. How can you avoid your company being upstaged by an upstart?
– Till Adam & Sven Knebel
Containerization is starting to appear in embedded, but it is definitely not yet commonplace. This white paper provides a general overview of containers in embedded from our own knowledge, research, and experience, as well as that from our partner Toradex, a hardware vendor who is also an expert in embedded containers. Hopefully it will help you answer if now is the right time to add this technology to your embedded tool chest.
– Kevin Funk
The build system for Qt 6 is moving to CMake. Should you use it yourself? What are the benefits of CMake, and how can it help transform your build system? Here are the basic facts you need to know to take advantage of CMake for building Qt applications.
– Till Adam
When building an embedded systems product, among your earliest decisions is the choice of hardware. More specifically, on what CPU should you base your design? Today’s system-on-chip processors have a huge array of resources to contribute to your solution: multiple cores and on-board DSPs, graphics engines and display controllers, peripheral support and connectivity interfaces, and more. Because a new hardware platform entails a costly investment it makes sense to consider your hardware selection wisely.
Whether you are considering an NXP i.MX 8, NXP i.MX 6, or another vendor’s silicon, there are many factors to take into account in order to make the right hardware choice. If you’d like some of our advice in narrowing down your silicon decisions, we’d be happy to help.
– Till Adam
One of the most difficult choices when starting any new software project is selecting the programming language and framework your team will use to create it. Should you stick with Qt because it’s the best tool for the job? Should you switch to something using web- based technology or designed explicitly for mobile? We can help you structure your decision-making process around the software options that might be the best fit for you and give you the necessary guidance to head in that direction.
– Christoph Sterz
Supervisory control and data acquisition (SCADA) systems have been around since the 1950s. Their rock-solid performance has been responsible for the streamlining of any industry that needs precise and consistent controls. However, now that everyone carries a superior UI in their pocket, the UIs of many SCADA devices look antiquated. Even the non-designers responsible for running the system expect their SCADA human-machine interface (HMIs) to have polish and sophistication. Having implemented attractive SCADA HMIs for our customers, we believe that Qt is the right tool to build the modern SCADA system.
– Paul Lemire
Learning to create 3D applications can be an overwhelming task even for seasoned developers because of all the new terminology, visual concepts, and advanced math. To simplify the job, many developers use a framework like Qt 3D.
Qt 3D Basics Part 2 Input and Animation
– Paul Lemire
The ability to create 3D applications is a skillset that is increasingly in demand as it plays a crucial role in advanced UX design, virtual reality, game development, and more. While developing a modern 3D program requires many disparate skills, there are frameworks that help the developer stitch it all together. Qt 3D is one that we recommend.
– Paul Lemire and Giuseppe D’Angelo
Many 3D graphic visuals can be handled with the same no-frills rendering techniques software developers learn during an intro 3D course. However, what if you want to incorporate one of many advanced rendering techniques – effects like shadows, refractive surfaces, water effects, HDR lighting, lens flares, or focus blurs?
– Kevin Funk
Code modernization is an essential part of the software development discipline. These days, the ISO standardization group is releasing a new version roughly every three years and the C++ language standard is evolving and improving faster than ever. To mitigate the cost and risk associated with code modernizations, tools for diagnosing and refactoring the usual programming patterns have become more and more popular. This whitepaper looks at a number of techniques used by automation tools to transform commonly used coding patterns.
This paper outlines everything you need to take into account when considering Qt as a new framework, so you can decide for yourself if this cross-platform tool is the right choice.
– Matthias Kalle Dalheimer
This in-depth whitepaper provides a detailed guide to help you effectively evaluate whether a migration makes sense for your current system, and to help you outline and execute your own.
– Sean Harmer
The need for safety-critical systems with user-friendly interfaces is on the rise. To respond to this need, the Khronos Group (responsible for OpenGL, etc) has introduced OpenGL SC, a new standard that enables graphics in safety critical applications. This whitepaper reviews the basic differences in moving from OpenGL ES to OpenGL SC, to help you quickly determine what’s needed in skills and software to make the change.
– Sean Harmer
Physically based rendering (PBR) emulates the interaction between light and materials and is a trend in real-time 3D rendering and now integrated in Qt 3D. Here’s a ten-minute guide to its essentials.
– Sean Harmer
Vulkan is a powerful new 3D graphics API from the Khronos Group, the same consortium that developed its spiritual predecessor, OpenGL and other related standards. Like OpenGL, Vulkan targets high-performance real-time 3D graphics applications such as games and interactive media, but offers higher performance and lower CPU usage, much like Direct3D 12 and Metal. Read on for a quick-start primer on the nine things you need to know about this shiny new API.
Writing Code That Won’t Kill
A collection of reading material, white papers, and academic journals about functional safety
Kuesa™ 3D Studio
The Complete Design-to-code Workflow Solution for 3D Assets in Real-time Applications
KUESA 3D Studio is a workflow solution bridging the gap between designers and developers so they can focus on their strengths to produce WYSIWYG 3D assets that can easily be refined and iterated.
As the world continues its steady march towards ubiquitous computing, almost everything from airplanes to toasters is being powered by embedded software. In fact, technology is so pervasive, we take connected homes, advanced medical equipment, and self-driving cars almost for granted.
However, many of us who work in the industry have some misgivings about what this explosion in embedded software ultimately means. There are some very important issues that need to be openly discussed and solved before it’s too late.
With the onset of pervasive and powerful mobile devices there’s been an explosion of applications across every field. However, creating 3D applications requires specialized expertise with a different design mindset, new programming tools, complicated math, and a detailed understanding of the GPU pipeline and framework APIs. Regardless of whether your application is virtual surgery, CNC control, or geospatial mapping, your team may need expert training and consulting services to shorten the very long 3D learning curve. KDAB is ready to help with comprehensive experience in a wide range of 3D frameworks and tools.
We’ve all had it happen: days before release you discover the memory leak that crashes your product, the test that makes your graphics sluggish, or the use case that brings your hardware to its knees. At KDAB, hard problems are our specialty. We know how to use the most powerful debugging and profiling tools around – in many cases because we’ve created them or we maintain them. We’re happy to help your team slay bugs, speed bottlenecks, and thrift memory on mobile, desktop, and embedded platforms.
The software behind 3D interfaces isn’t easy to create. Much of that difficulty comes from the perennial disconnect between UX designers, 3D artists, and software developers. KDAB specifically created KUESA to eliminate this problem. KUESA makes for an easy, integrated workflow, bridging the gap between designers and developers. Designers can continue to use their preferred tools to create 3D assets while developers can use KUESA for previewing, conditioning, optimizing, manipulating, and displaying those assets with files directly from design tools.
New releases of the C++ language maintain incredibly strong backwards compatibility, making it easy to keep older C++ code working properly as standards march forward. C++11, C++14, and C++17 have transformed the C++ language making it as programmer-friendly as more recent languages but with many essential benefits that continue to make it the best choice for the most demanding software-engineering projects. Modernizing your C++ may be the best way to both improve your team’s efficiency as well as future-proof your software investment.
If your project already uses Qt 4, it should be simple to upgrade to Qt 5, right? Whilst Qt 5 was designed to minimize the pain of upgrading from earlier versions, there are still pitfalls that can turn it into a complex task. With strapped resources, limited budgets, and shifting priorities, the right moment to move off a legacy framework can easily be put off. At the same time, the pressure to migrate to a newer framework mounts week by week. KDAB can help you.
If your project relies on MFC, chances are you’re trapped by a framework on life support, unable to take advantage of productivity gains, new libraries, multi-display hardware, crossplatform support, mobile app development – the list goes on. Through porting many MFC projects to Qt, KDAB has accumulated a wealth of knowledge on how to migrate systems still under active development with minimal disruption. Let us help you.
Companies that still use the QNX Photon microGUI in their products — a deprecated and unsupported technology — are trapped using older hardware, unable to update libraries for latest bug fixes or security patches, and stuck on old versions of the QNX OS. KDAB is an expert in migrating Photon software to a modern UX framework based on Qt, and the only QNX-recommended supplier for this process.
This is a brochure of all our Trainings.
– Sean Harmer
An in-depth look at improving the visual quality and computational throughput of systems with OpenGL,
from Dr. Sean Harmer, KDAB expert and the maintainer of Qt 3D, writing for the USA’s premium magazine for embedded computing: RTC magazine.
Embedded’s Gone Cute (from 2015)
– Rafael Roquetto
In this article for RTC Magazine’s 2015 issue, KDAB’s Rafael Roquetto lays out how and why Qt is the way to go for modern user interfaces in the embedded world. The need for next-gen UIs has finally reached the embedded world. Owing to increasing demand, vendors have been looking for alternative technologies to enable modern user interfaces on their products, and have been finding Qt (pronounced ‘cute’) is the perfect fit.