Skip to main content

The Problem

I recently ran into an issue where my Raspberry Pi file share server fell over because of hardware currosion due to some unfortunate moisture exposure. In response, I had planned to replace the file share server with a Mac Mini that was available until I could get a replacement RPi. The service is basically SFTP and the users are responsible for having SFTP clients that meet their needs.

For years now I've always found process to be a facinating area of software engineering. But please don't misunderstand my meaning ... most processes in my experience not only feel painful to the individual contributors but also seem wastful to the overall organization.


By far, the most common use case for a toolchains (compiler, assembler, linker) is for building applications that run on top of an Operating System. A lesser used use case, but still common is to use toolchains for building drivers or modules for the Operating System. What I can only assume is one of the more rare uses cases is using the toolchain to build firmwares that do not have an Operating System. This has become abundantly apparent to me while exploring the possibilities of building firmwares outside of the GNU ecosystem. (Note: I'm focusing on big toolchain suites like LLVM, GNU, and MSVC. I'm aware of other tools like Keil and other proprietary toolchains.)


Its a common pattern to store user authentication tokens in a user's home directory. This way we can login to a service that has a command line interface without having to enter credentials each time we use the command. The one service I know that has done this for me for decades is Subversion. Recently, I've also been logging into services like Firebase, Google Cloud Engine, and All of these services store their user authentication tokens in the user's home directory.


When I work from home, I often find myself working from my laptop for the portability. My laptop doesn't have all the resources that my desktop has, so I normally SSH into a Virtual Box VM that runs from my desktop PC. This works great when I am home, but I've found that on several occasions that I am on the road or not within physical reach of the PC hosting the VMs. Unfortunately, between Microsoft Updates happening more often now, and other things that potentially can cause my PC to reboot itself, I'll wake up to find that I have no connection to the VM I planned to work from.


Started using tmux this year in an attempt to streamline some of my typical workflows. It also is handy to make up for the lack of terminal tab support in VS Code. When I first started using tmux, it became quickly apparent that copy/paste actions are a little more involved. Since I only ever did horizontal splits, I quickly just fell back to holding Shift for everything.


I've been developing software for over 20 years. In that time I've used make more than any other build system tool. It is the grand ol' build system that many developers find themselves cursing, regardless of the fact that OSS has been riding make for much of its existance. Over the past 10 years, I've also used variants of Autotools, SCons, CMake, and other custom solutions. I've even, twice, rolled my own build systems (and not just wrappers around make or scons).

Case Styles

Reading through Google news, I came across a term I never heard before that really stuck with me. "kebab-case". This is often what I use when naming files that are composed up multiple words. Others were suggesting that this is the best convention for git branch names as well. To recap, here is a list of the different case types:

My family often requests my attention while I'm listening to a video or music. Having the volume and pause/play actions mapped are very important to me so I can give them the attention they deserve. Looking at my apple keyboard, there are F16-F19 keys that are completely unused in my Windows/Linux environment. Therefore I mapped them to the following actions: