Efficient embedded development relies on consistent environments, smart dependency management, and robust CI pipelines. Containers ensure reproducibility and streamline onboarding, while balancing source builds and pre-built packages keeps dependencies manageable. Optimized CI with parallel tests and hardware-in-the-loop improves feedback and quality. Incremental refactoring with atomic commits enables continuous improvement without disrupting development.
Common render issues and their solution -Part 3
If you are here from Part 1, you missed Part 2, somehow. You have tried everything from the first two parts that seemed applicable, and your screen is still a window to the void? No problem: we’ve gathered another five reasons black screen issues could be happening and how to go about fixing them. Issue […]
Common render issues and their solution - Part 2
If you are here from Part 1, welcome back. If you are wondering why we started at Part 2, go to Part 1. So, you tried everything from the first part (that was relative to you), and your screen is still a backlighting test? No problem. (Well.. I mean, clearly there is but […]
So, you've just poured your heart and soul into some real-time 3D rendering code and hit render. Wringing your hands in anticipation you wait for the screen to show your marvellous creation. Still... waiting. It says it's done but, nothing. Well, maybe not nothing but simply darkness. You stare into the deep dark […]
When I came to KDAB to work, working at home was a bit of a culture shock for me - I’d previously only ever worked in an open-plan office and had sworn that home working was not for me – I’d never manage to get anything done! However, I’ve found that home working suits me […]
In a previous blog post we introduced clazy, a clang plugin which makes the compiler understand Qt semantics, allowing you to get compile-time warnings about Qt best practices ranging from unneeded memory allocations to misuse of API, including fix-its for automatic refactoring. Today we'll do a round-up and present the checks related to connect statements, […]
This whitepaper is the first in KDAB's Software Development Best Practices series and covers the basics. Many of the tips will not surprise 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.
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. This whitepaper gives a few general best practices widely applicable to most development projects.
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.
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.
In a modern software development process, continuous integration (CI) and continuous deployment (CD) play 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.
For consumer apps in app stores, update delivery is straightforward. But many systems—like embedded devices, industrial desktops, and specialized tablets—operate outside these stores. For such applications, developers must design their own robust update delivery mechanism.
While an all-Rust approach works for some systems, most companies have extensive existing C and C++ code. Rust's design, rooted in Mozilla Firefox's development, has always aimed to integrate with these languages. By consulting Rust experts, we've developed guidelines for harmoniously blending Rust with C and C++ in various scenarios.
Industry giants in many fields have been toppled repeatedly 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?
Discover the crucial link between cybersecurity and HMI design in today's threat landscape. This document explores common misconceptions, attack vectors, and the necessity of protecting your systems, whether you're a beginner or an experienced expert. Don't underestimate the vulnerabilities that can arise from your HMI!
As a front-end developer, understanding functional safety is essential, even if you focus on user interfaces. This paper highlights the importance of your role in safety-critical systems across industries like aviation and healthcare, emphasizing compliance with safety standards to prevent harm. Expand your expertise and see the bigger picture in HMI development!