Chip-8 Dev Challenge: Sound
Introduction Sound in Chip-8 is very easy. If the sound timer isn’t 0, play a tone. While this isn’t difficult, XO-chip adds another level of complexity. It uses a 16 byte pattern buffer with an associated pitch in order to create unique tones which can change per frame. Thus, XO-Chip can create basic music with it’s expanded audio. XO-Chip Audio This was by far the hardest thing to support while developing Chipped-8....
I Made a Chip-8 Emulator
Introduction I’ve been following game console emulation for a long time and I decided I wanted to learn more. Specifically, the hardware aspect because I have no experience with how chips work. In order to learn more, I decided to write an emulator for a simple system. I originally thought NES but that is more complex than was realistic for me. Next, I thought of the Atari 2600 but even that seemed like a bit more than I’m ready for....
Optimizing Docker Container Image Size
Introduction When I was containerizing my blog search service, I went through multiple iterations of the Dockerfile as I was learning how to create an image. Containerizing was easy but I wanted to create a small and efficient image and that process was a bit more involved than I expected. I want to go into a little detail about what I learned about writing a Dockerfile that puts importance on the final image size....
Updating Blog Full Text Search
Introduction A few years ago I switched from WordPress to Jekyll and I lost full text search. But then I remembered I’m hosting my blog on my own server! So I wrote a Full Text Search service to restore the only feature I lost in the transition. This was working great until I moved from Jekyll to Hugo. The search Javascript needed a slight tweak but otherwise search was still working....
A Better Vaultwarden Deployment
Introduction Earlier this year I looked at switching from Bitwarden (online service) to self hosting Vaultwarden. The post I wrote was fairly high level and focused on different container options. It was a fairly generic deployment that didn’t go into much detail. Configuration and security considerations were woefully neglected in that post. It also didn’t go into detail about how I’d integrate it into the VPS that I use as VPN, DNS, and now password vault server....
Switching from NGINX to Caddy
Introduction My go to web server has always been NGINX and it’s been my default choice since I started this blog. Any time I need a web server it’s without question NGINX. That is until recently. I’ve been playing around with containerization and specifically making my vaultwarden deployment better. But that’s for another post. As I was looking into this, the Caddy web server kept coming up. Vaultwarden seems to really like it....
Moving from Jekyll to Hugo
Introduction I needed to update some pages on my blog and while looking at it, it feels a bit stale. The site design hasn’t really changed in nearly 15 years. The only real update was in 2019, when I switched from WordPress to Jekyll. They were minor changes and made to accommodate moving to Jekyll. Otherwise, this blog has looked and acted essentially the same for all these years. Wanting to update the style also meant I should take the time to update things like Javascript libraries, Jekyll plugins and what not....
Automating DNS Adblocking
Introduction A few months ago I setup a private DNS resolver with ad blocking. At that time I decided to manually update the block file whenever I installed server updates. This works, but it very quickly became tedious. I’m not sure why I initially thought it wouldn’t. I’ve since decided to automate the process. Block File Script The previous script I wrote would download a hosts file based block list and convert it into a format that Unbound can load....
Linode vs DigitalOcean
Introduction For about the past 14 years I’ve been using Linode as my preferred personal VPS provider. I started using them at the beginning of November 2008 when I first setup my blog. Other than a short and painful mistake of hosting my blog elsewhere, it has lived on Linode. Recently I had to setup a VPS with DigitalOcean. This was due to needing the VPS in a data center located in a very specific place....
Vaultwarden a Self Hosted Password Vault
Introduction When Lastpass first came on the scene I jumped on it because of how easy it makes syncing passwords between devices. Previously, I was using a local password manager that was only on my computer. Thankfully, mobile logins weren’t nearly as necessary for daily life back then. However, I still needed my computer to log into anything on my phone. Over the years, Lastpass started having security incidents. This isn’t surprising with how big it became....