I have never completed Advent of Code before, despite starting it almost every year. For 2025, there were 12 problems, so I thought maybe I could actually finish them all. But, there's also something else going on in 2025: AI. There's tons of evidence that AI tooling can just solve the AoC problems all on its own . The models can even write reflective blog posts about the problems . In the face of…
I wrote my 2025 Advent of Code solutions in Emacs Lisp. My Emacs Lisp style was not very lispy or functional. I'll discuss this more, and why, in a future post. In this post, we will discuss a performance mistake I consistently made in my solutions with two examples. argmax I wrote this bit of code to find the location of the max element in a vector: ( cl-loop for i from 0 below (length vec) with…
A project I've been working on recently requires that I set a group of pins (4 of them) on a Teensy 4.1 to certain values at roughly the same time. For simplicity, I'm using the Arduino libraries for this project (but writing C++). We can fortunately easily look under the covers with the Teensy's Arduino implementation. In this post I'm going to walk through a few bad ways this can be done, and…
Many DSP resources use "pole-zero" plots to compactly represent audio filters. These plots show where a filter's Transfer Function explodes to infinity (poles, x on plot) or goes to zero (zeros, circle on plot): Figure 1: pole-zero diagram Unfortunately, I was having a hard time connecting these visualizations with the way a filter "sounds". There's a number of interactive "filter explorer" tools…
I've recently been toying around with different headset setups for zoom/casual online gaming (with voice) with friends. As part of this experiment, I decided to try out a pair of true wireless bluetooth earbuds, but was astonished by how terrible the audio latency seemed to be. In a (failed) attempt to measure the latency, I wrote these two little web "apps": Proof of bad audio latency - a canvas…
I've built a micro-benchmark which sends data between CPU 2 cpu cores. On my single AMD 3800X desktop CPU, I have crafted a microbenchmark which has different performance characteristics depending on pair of cores I select for testing. Results like this should not be surprising on a multi-socket system, but this system has only a single processor. I believe this micro-benchmark is highlighting…
For the last 192 days (according to uptime on one my routers), I've been setting up a small homelab. Homelabs are kind of cool, and, the setup has been interesting . I'll be writing a few posts explaining the steps I took. Part 1 VPN setup Part 2 Servers and 10GbE Part 3 NAS, ZFS, and NFS Part 4 (this post) Now that I have a VPN, a server, a "desktop computer" connected to the server over a fast…
For the last 172 days (according to uptime on one my routers), I've been setting up a small homelab. Homelabs are kind of cool, and, the setup has been interesting . I'll be writing a few posts explaining the steps I took. Part 1 VPN setup Part 2 Servers and 10GbE Part 3 (this post) Part 4 Services and Applications In this homelab post, I'll be detailing how I converted the R720 I bought on eBay…
For the last 171 days (according to uptime on one my routers), I've been setting up a small homelab. Homelabs are kind of cool, and, the setup has been interesting . I'll be writing a few posts explaining the steps I took. Part 1 VPN setup Part 2 (this post) Part 3 NAS, ZFS, and NFS Part 4 Services and Applications Since I could access my system remotely, I had started sticking interesting network…
For the last 170 days (according to uptime on one my routers), I've been setting up a small homelab. Homelabs are kind of cool, and, the setup has been interesting . I'll be writing a few posts explaining the steps I took. Part 1 (this post) Part 2 Servers and 10GbE Part 3 NAS, ZFS, and NFS Part 4 Services and Applications VPNs Unfortunately, I don't have a public IP in my building, so setting up…
List of c-induced misconceptions I had to clarify when learning rust: move is memcpy (no move ctor): pin misconceptions type-punning is (sort of) okay: reddit post
Pin is pretty important for Rust's recently-released async.await features. I read the docs. I didn't get it 1 . This exercise is what it took for me to understand why Pin is important. Opening up the documentation, the page starts with a discussion about Unpin . Unpin is weird. Basically, Unpin says "yeah I know this is pinned but you are free to ignore that." My gut reaction to Unpin was "why…
Suppose we have two very similar structs which we need to partially populate "ahead of time" and store somewhere. Then, a bit later, we need to very quickly finish populating the structs. Here are some example structs: struct __attribute__ ((packed)) A { int64_t a; int64_t b ; char arr [PADDING1]; int64_t c ; }; struct __attribute__ ((packed)) B { int64_t a; int64_t b ; char arr [PADDING2];…
If you don't know anything at all about realtime audio programming, you might want to read the first post in this pseudo-series, Audio Programming 101 , or watch this talk from the Audio Developers Conference to get a little bit of background. In short, there's a realtime thread that can never be blocked in any way. The realtime thread is responsible for sending all of the audio which an…
Recently, I've been working on a synthesizer (the kind that makes sounds) in Rust. I am hoping to write a large number of little articles about the things I learn as I work on this project. To start off this series, here's a short article about audio programming. Digital audio To generate audio, audio software sends some digital audio signals to the audio card. Digital audio signals are just lists…
This Project is essentially an attempt to recreate some of the Halide project in Rust as a means of learning that Rust language. Halide is a really clever C++ library that allows programmers to define image processing algorithms in domain specific language which are compiled according to some sort of execution strategy. These strategies might be "tile for cache efficiency" or "optimize for…
For my CS242 final project, I simulated ants with Erlang. In the following video we have a 1000 by 1000 grid with 2000 ants running around on it. There is food in a small square on the upper left. The simulation ran for 1 hour (53,840,103 events were recorded). Model I've attempted to capture two behaviors of real ants with my simulation: ants communicate using pheromones (scents), and they want…
This post is intended to be a continuation of the previous post discussing study groups. You can probably find that post pretty easily on this site. If you haven't seen it, go back and read it! I would also like to say that I am quite interested in criticism of this little article. I don't intend to go much farther with this project, but discussion about it could be quite interesting. And of…
Almost without fail, whenever my friends and I get together to study for something in a group, we end up in a group that, due to it's size, decreases our productivity. I'm reading a book at the moment about animal behavior, and one of the chapters referenced some research done about animal group formation. In some models, with simulation, it can be shown that groups almost always grow to be larger…
Decision matrix analysis is a simple way of selecting one of many options. This post exists to allow me to dump thoughts somewhere (so I don't forget them) and share them with others easily. I will probably update this document as I have new ideas. Brief Description Simply put, a decision consists of objectives and alternatives. An objective is something you want to fulfill by making the decision.…