To build my electronics lab up from first principles, I decided to tackle building a reflow oven first. This is both achievable, and there are a few precedences available which makes this not something that hasn’t been done yet. The venerable Controleo3 from Whizoo has long been an excellent choice if you wanted a hackable DIY reflow oven. However, I wouldn’t learn anything if I just were to buy a…
A prototype development board for the RP2040 ARM Cortex-M0+ Microcontroller from Raspberry Pi. It’s using the QFN-56 IC of the RP2040, and exposes all the GPIO via standard 2.54 mm (100 mil) pitch through-hole headers. For easy hand assembly it’s using only 0603 passive components and SOIC ICs with a pitch of 0.5 mm or more. The most difficult component is the QFN-56 RP2040 MCU, which requires a…
I regularly use Windows’ Remote Desktop Protocol (RDP) to connect from a non-Windows client to a Windows host machine (e.g., from my MacBook Pro to my CAD/Gaming Desktop Tower PC) to access software otherwise not available on Linux or macOS (mostly CAD/eCAD software like SolidWorks or Altium Designer). Unfortunately, by default the Remote Desktop client application from Micro$oft has…
How are you transferring files to remote servers, only accessible via SSH? Are you still using SCP? Are you tired of watching the file upload with 23 KiB/s? Fear no more! rsync to the rescue!
The KiCad Tools is a toolsuite that assists with part management in KiCad 9 or higher. For this project, I have implemented a parser for the S-Expr based library files from KiCad. This allowed me to read and augment the schematic symbols and footprints. For the augmentation, I have connected with the search APIs of Farnell, Mouser, and LCSC. Part information is extracted and attached to the parts…
A development and prototype board designed around the STM32C071 ARM Cortex-M0+ from ST Microelectronics. The board is designed for cost effective assembly by only using 0603 passive components and SOIC ICs with a pin pitch of 0.5 mm or more. The MCU is an STM32C071RBT6, specifically the LQFP64 package with 64 pins and therefore plenty of I/O. The I/O is exposed either via standard 2.54…
uv is a package manager for Python that’s been gaining some traction for the past year or so. As already blogged/written about many times , uv can be used to write single-file Python scripts without having to worry about virtual environments. However, they all suggest using #!/usr/bin/env -S as a shebang to invoke the script with uv run --script like this: #!…
A proof-of-concept for creating a set of native applications to improve the user experience. The core logic and API implementation of the application was built in multi-platform Rust. I re-implemented the doxy.me REST API in Rust, as well as a lightweight SDK for the real-time provider (at the time of implementation that was PubNub). The core was then used from within the iOS application and macOS…
Gerrit is a code hosting system similar to GitLab or GitHub , focusing on a better review experience rather than integrating with every other service on the planet and neglecting the core experience of their product. Since GitLab, GitHub, and their predecessors have been so prevalent in the broader software development community, Gerrit requires a bit of rethinking of interacting with your…
While browsing reddit I’ve came across “ JetBrains Mono ”, the “new” programming font from JetBrains. This started, yet another, rabbit hole down the currently available programming fonts. The current contenders are:
With Sync-Plus for @magenta.de/@t-online.de email accounts, you can set up synchronization of your emails, contacts, and calendars so that they are always up to date on your smartphone, tablet, and the web. FEATURES AT A GLANCE: Set up automatic synchronization of your calendar, address book, and email inbox Import contacts from your smartphone or tablet into your address book at…
This is an amendment to one of my previous posts which was building a small Makefile for simple C projects. Here, I’m presenting essentially the same file, but with added C++ support:
As a technical lead on the Porsche Motorsport Hub project, I lead a team of engineers to build the premier location for everything Motorsport at Porsche. As a team we achieved to be the first public website on the new Sitecore XP platform that was being rolled out for all Porsche web presences at the time. The Motorsport Hub was built in React.js, Sitecore XP and Contentful.
Many terms we use everyday were once brand names, but since have become generic terms we’re now using to refer to the category of products in general. A majority of these are or were registered trademarks. These are known as genericized trademarks .
Yesterday I wrote about the terrible quality of the default pseudo random number generators in the C++ standard library. The article came to the conclusion they’re all around terrible, and should generally be avoided, yet, it didn’t provide any alternatives. Therefore, today I’ll provide you with three very good alternatives to the existing generators in the C++ standard library. splitmix xorshift…
The goal of the C++ tour project was to create a new way of teaching C++. First and foremost we want to target those, who already have some experience in programming, but are new to C++ or return after a longer absence. We want to guide through features of the language and standard library, showing pitfalls and best practices. The tour will be split into lessons. Each lesson is teaching a single…
tl;dr: Do not use <random> ’s generators. There are plenty good alternatives, like PCG , SplitMix, truncated Xorshift32*, or Xorshift1024*. A recent tweet reminded me of the <random> facilities in the C++ standard library. Having just recently studied and implemented a couple random number generators myself, I was curious how they hold up in a modern test. From the get-go, I knew this is going to…
The following is a list of architectures where certain instruction sets have been introduced first. The column “instr. set” only lists the introduced , not all instruction sets.
On Windows, debugger symbols aren’t stored side-by-side with the executable data in the same file. They’re stored in a .pdb file (short for “program database”). This is especially great if you distribute your program to end-users, but still want to be able to debug any crashes. Just keep the .pdb file somewhere save, and any crash log you get send can easily translated back into source locations.…
The following tweet sparked my interest to investigate further into the different ways of mapping and unmapping memory on Windows, and trying to find the “best” way:
Update 1: Visual Studio 2017 works. Thanks to STL. Disclaimer: This isn’t about clang/C2, clang/C2 is Microsoft own fork of clang to work with their backend. This is using clang + llvm. tl;dr: All the source is in this repository: https://github.com/Leandros/ClangOnWindows
If you want to color the output of your terminal program in Windows, you might’ve noticed, that running it from different shells reacts differently. cmd.exe does not recognize the ANSI escape sequences to change the foreground/background color, while bash.exe does not recognize Windows’ SetConsoleTextAttribute . This poses a problem. A way to detect if the output is going to bash.exe or…
Using #ifdef ’s to configure different conditional compilations is very error prone. I believe we’ve all had the case where something was compiled, while it shouldn’t have been, due to accidentally creating/including a #define of the same name or defining it to 0 while checking with #ifdef . While I won’t give you a solution to fix the flawed model of using the preprocessor for conditional…
This is the first piece of a series of posts describing a few, very easily solvable, shortcomings of the C language. And proposing a way to fix these. This is purely done the fact that I’m currently working on a C compiler. While I’ve written a few compilers over the years, none was actually intended to be used in production. This time it’s different!
Dragons & Diamonds is a mobile RPG game developed by Voony Games & Kiloo. The game is a mixture of a match game and fantasy RPG, where the player needs to match gems to defeat various enemies in stages. The player progresses through various levels and stages. The game was built in the Unity game engine using C#.
Camparound is a new app to digitally plan your next camping trip in a smart, fast and convenient way. I was solely responsible for building the iOS and Android applications for Camparound. I worked together with Werkdigital, who were building the backend to create two modern, native and responsive mobile applications. The iOS application was built using Objective-C. The Android application was…
Did you know, that Intel has a naming scheme for their SIMD instructions? Neither did I. I found, by watching a CppCon talk by Tim Haines , that SIMD instruction have a pre-defined scheme which can be used to easily decode the, sometimes, cryptic mnemonics. To much of my surprise, it’s not mentioned nor explained in any of Intel’s manuals.
GDB on macOS can’t display a few of the segment registers, which results in that the respective variables are not available for use. Trying to use them will only print $var is not available and skip the rest of any currently running function. Merely executing this line printf " %04X " , $ ds without $ds being available would stop executing the whole function. To lazy to read and just want the…
Makefiles are flexible in many ways, it’s a small language in itself. As I said in a post before , I normally write the same Makefile over and over, even just for compiling a simple project with two or more files. The there proposed Makefile , however, grew quite big during the writing of the post. Today I want to present you a variant which is tiny, yet compiles your small to medium projects just…
As some of you might already know through my Twitter, I’m currently attempting to build an advanced standard library for C, with similar performance and usage characteristics as C++’s STL. It’s going really well so far, but the sort algorithm of std::sort is giving me headaches.
Update: Now also supports C++, see the Github repository ) for the updated file. In every single project, or even just test, I write the same simple Makefile over and over, by now I can write it without looking up anything. And if I forgot something, I would go through my old projects, to dig up the definition I need. Today I got fed up with that, and decided to write one completely generic…
I’ve recently started working on a little side project, involving Gameboy development. While reading through the docs of BGB, I noticed it supports printing debug messages to a debug console, I, however, couldn’t get it working, since it was using the syntax of the no$gmb assembler. Thanks to the people of #gbdev on EFnet, especially beware , I’ve eventually got it working, and made an rgbds macro…
I’ve noticed my Vim got horribly slow once I had multiple panes in tmux open. My initial investigation led to the fact, that tmux is slowing Vim down, and a quick Google search confirmed that. After removing all plugins in Vim/tmux, I dug through the iTerm2 settings and found this:
I’ve recently been reminded of a tool called Archey, it’s used to display system specs in a delightful manner. You often see it in screenshots of some other people desktops of the Arch Linux community. I missed such a tool on OS X, and that’s why I wrote SysInfo. It’s available on Github.
Built the first fully cross-platform CLI client for the tl;dr pages project. Written in C90 for Linux, and macOS. Open source on GitHub under a permissive license. Went unmaintained due to a lack of time.
GUESS, together with Martian Watches, released a smartwatch. I was solely responsible for building the iOS and Android application to interact with the GUESS Connect smartwatches from the smartphone. The app allowed users to configure their watches and setup what applications were allowed to send notifications to the watch. Features include: Simple interface to customize which…
Arvid Gerstmann is a software engineer, entrepreneur, manager, and occasional speaker . He is the founder of RagnarLab , a software and management consulting company. Arvid has previous experience as Head of Software Engineering at ZEISS Vision , Head of Software and Architecture at Doxy.me, Inc. , and served as the Chief Technology Officer at Appico. Holding a degree in electrical engineering,…
Whitesonic was a start-up company spun out from the RWTH Achen university to develop an ultrasound scanner for dentists. I built the embedded GUI for the Whitesonic ultrasound scanner in C++ using Qt . Unfortunately, the scanner never got the medical approval and shortly after ceased operations due to lost funding.
This page lists all my recent talks and links to the slides and recording: Table of Contents emBO++ 2019 C++ On Sea 2019 Meeting C++ 2018 CppCon 2018 Meeting C++ 2017 emBO++ 2019 Refactor C++ Using LibTooling Slides Video C++ On Sea 2019 Building a C++ Reflection System in One Weekend Using Clang and LLVM Slides Code Video Meeting C++ 2018 Building a C++ Reflection System in One Weekend Using…
I’ve resurrected my blog, and put my .io domain to a good use, and set-up a ghost blog. So far, I’ve always had my personal websites cluttered on many domains, but this came to an end, everything is now on arvid.io. You can expect new posts in the next few weeks, I already have something prepared.