I have a penchant for trying to build practical things in obscure programming languages. Scheme isn't that obscure, but it's used pretty infrequently for "real work" (unfortunately). I'm quite a fan of it, so I decided to give it a shot for writing a web app, something that I do pretty often. Since there's so many implementations, I tried a few. I also took a holistic approach to the entire system and reevaluated my choice of text editor for the task.
While my previous Jekyll-based website wasn't horribly complex, maintaining it was still a chore. Like most software written in a scripting language, Jekyll has a lot of run-time dependencies that must be installed for it to function. Given that I switch between a few different computers running different operating systems, making sure that all my Gems were up-to-date was annoying. Since I'm not getting paid to make my own website, I figured that I might as well migrate it to a simpler static site generator.
The fact that C is the dominant programming language for everything low-level is an interesting historical oddity. Even though there were far better languages around when C was created (and now, of course), C still somehow ended up being what everything was written in. For that reason, having a good understanding of some of C's intricacies is important to be able to do security research or just maintain software written in C. There are far more complete resources on this topic, like the original C FAQ; the purpose of this post is to address specific things I would have liked to have known when I was starting out with C.
Windows software is so prevalent that it's practically impossible to avoid running it in some way. Luckily, virtual machines let you run the occasional .EXE on an isolated system without dual-booting. The go-to free virtual machine program for years has been VirtualBox, but after having it screw up my Arch Linux system and trying out GNOME Boxes on Fedora, I can wholeheartedly recommend that everyone who's currently using VirtualBox to run Windows switch to Boxes.