CPU Upgrade!

I was having trouble hitting framerate in Beat Saber, especially with spectator view smoothing on in Koto. Upgrading the CPU helped a lot:

Ryzen 7 1700 with wider and higher frame time distribution.
Ryzen 7 3700X with narrower and lower CPU time more in line with GPU time.


I made a scan of the corner of a room to test. I took 34 photos with a Nexus 5X on a tripod with this 3D-printed mount printed by a friend and Meshroom.

This tutorial was helpful. The white balance was fixed, exposure was 100 ISO, and focus was at infinity. I might want to try a closer focus next time; see if that changes things.

Announcing Raspberry Launchpad

I’ve been working towards this for several months, but today I finally wrote initial software for the thing:

It’s small; the screen is about 2″ diagonally.

The intent is that this provide useful information as you’re getting ready to go out the door. What’s displayed in the image above are easier, proof-of-concept things:

  • Sunrise and sunset times (this still required dealing with Daylight Savings Time, as if I needed another reason for it to annoy me)
  • Day and date
  • System uptime

As it is now I have it refreshing on the hour.

This is just the beginning, though! I hope to add support for configuration files, and weather and bus information too. It’d be nice to know what sort of temperatures to expect that day, and whether I’m likely to need an umbrella. And when to leave for the bus. (I have USB speakers so it could chime.) The e-ink display (PaPiRus Zero) I’m using has some tiny switches on it, but they’re not easy to use at all, so I’m hoping to figure out how to use a handful of keyboard keys. 3D printing will likely be very helpful with that.

It’ll involve more hardware work, but I’m also hoping to have this thing provide a UI for measuring the weight of my cat’s food and water bowls. Currently I’m doing it manually, and I only get a start and end measurement for each day at varying times, so there’s a lot of slack to it. If I automate it, every few minutes will be no problem, and I can get an idea of his consumption rate. Graphs! This seems likely to require more soldering, as I haven’t been able to find a USB scale that operates in grams, but I have been able to find someone else with the same problem who solved it by soldering things.

You can find the code here.


Almost two weeks back I had this dream:

I had constructed a sentient intelligence in a cube one foot to a side. It had a little lopsided hat on top and was suspended over a three-story drop onto a enormous floor constructed of white panels which reached out past the horizon. My intent was to use this cube for calculations.

When I climbed the staircase up to it, it said to me “two plus two is two and big foo.” Seeing my expression change, it asked apprehensively “you don’t like big foo, do you?” I said I didn’t. It said hopefully “well, you have time to fix it, right?”

I thought for a moment, and instead of answering it directly I started battering at its connection to the line suspending it above the floor, trying to get it to detach. Recognizing my intent, it said “let me save you the trouble.” There was a click, and it started falling. Just before it hit it called “remember my percentage!” then shattered into its components across the floor.

OpenVR Volume Control

Beat Saber is pretty loud, so I often want the volume level at or near 1%. This is hard to do from within VR with existing tools, which involve pointing at a small 2D slider.

So I made this:

It’s available on GitHub, and I’ve posted a build of v0.1.

I hope it’s helpful!

Adventures in VeraCrypt Bruteforcing

I wrote a script – one that facilitates bruteforcing VeraCrypt passphrases – with the intent that the user probably remembers most of the passphrase. It’s available here.

It didn’t end up working for me, outside of test cases to make sure the script itself worked, but hopefully it’ll prove useful for others. One day I realized I was in the process of forgetting my VeraCrypt FDE passphrase, even though I’d been using it for months. It was odd – as though the harder I tried to hold onto it the more damaged my recollection of it became. Even though I still think I remember it, the passphrase I remember is wrong. I used the script to check similar passphrases, but they too were wrong. Going forward, it seems wise to not rely on muscle memory, and instead repeat to oneself the actual content of one’s passphrases from time to time. Go over mnemonic devices. Fight against it slipping away.

C.H.I.P SSH Troubles

I was working with a C.H.I.P and the SSH host keys were regenerating each boot after upgrading to Stretch. This caused a host key mismatch every time. It turns out /etc/rc.local was a script which checked for the presence of SSH host keys, including DSA, and if found all of them it replaced itself with /etc/rc.local.orig, which is the stock does-nothing script. If it didn’t find all of them, it would delete any existing keys and regenerate all of them.

I still don’t understand why this produced the behavior it did, because the script did succeed in producing DSA keys, but replacing the weird /etc/rc.local with the /etc/rc.local.orig that just exit 0s seems to have solved the problem.