RSSAmplifier

Blog

bloglien

Recent content on bloglien

blog.ollien.comRSS feed ↗12 posts

Latest posts

LLMs Reduce Development Friction. Is That a Good Thing?

Even as an “LLM-skeptic”, it would be silly for me to say that the tools are useless for software development. There are clearly times where they can be useful, whether that’s to perform a refactoring too complicated for IDE tooling, or to get a proof-of-concept put together. With that said, in my time both using and watching others use LLMs, I have noticed a troubling trend:…

Scrolling With Your Trackball in 2023 and `libinput`

A bit of a shorter post, but I wanted to share my findings in case this helps someone down the line with my niche annoying problem. I recently bought myself a trackball, after using a mouse for years 1, and my one major complaint has been scrolling. Someone in the /r/trackballs Discord server pointed me towards “marblescroll”, which allows you to scroll with your trackball when you…

Pull Backups with Borgmatic

I use Borg for my personal backups; I find its compression and deduplication features really useful. However, it is architected around the threat model of having a client you trust, but a backup server you don’t. As a result, backups are all encrypted and push-based (i.e. the client ssh’s into the remote and only sends encrypted chunks). While this is fine for quite a lot of usecases,…

Demystifying the GameBoy/SM83's DAA Instruction

As an off-and-on side project, I’m working on a GameBoy emulator. I definitely still have a long way to go (still working on the CPU!) but I wanted to share a detail that I felt deserved a more in-depth explanation: the DAA (“Decimal Adjust Accumulator”) instruction. This instruction is notorious for being a bit difficult to wrap your head around, but there is seemingly very…

Synchronizing a Docker Image Without a Registry

This will be a shorter post than most, but I wanted to share a cool “trick” that I stumbled across. I have a small project that I don’t want to publish to any public Docker container registry, but that I also wanted to deploy onto a server of mine. This can actually be done pretty easily with the following
docker save $IMAGE |pv |ssh $REMOTE_HOST docker load docker save will…

Leveling your 3D Printer's Bed with Klipper

It’s almost a cliché in the 3D printing community: if there’s a problem, level your bed! Indeed, this does actually fix a surprising number of problems. However, anyone who has done it will tell you it is an absolute pain in the neck to level your bed over and over again. While there are auto-bed-leveling probes, all these do is compensate for variations in height on an already…

Static Assignments in your DHCP Pool: A Cautionary Tale

For the last few months, I’ve been facing head-scratching behavior on my home network. I recently noticed that my work laptop would periodically have awful packet loss. Sometimes, I’d connect to my network, and then all traffic would stop after a few seconds. The cause was unknown to me for a while, but I assumed it had something to do with a Wi-Fi driver issue that I couldn’t…

`new Date` Considered Harmful

While I don’t know that I’d consider myself a “professional” Javascript developer, I do find myself needing to dive into some Javascript at work. One curiously recurring bug I see is misuse of the Date constructor. Can you spot the bug in the following code?
const date = new Date('2023-01-10'); console.log(date.toDateString()); Depending on where you’re reading…

Using Generated Columns in Ecto

I was playing around with Ecto and SQLite, and one thing I noticed is that there seemed to be no native support for generated columns, which I needed for a project I was working on. I only found some vague references on how to do this online, so I figured I’d immortalize my solution in a blog post.
Let’s consider a table with the following schema:
CREATE TABLE taken_log( id…

Where I've Been

I’ve not really been active in writing blog posts over the last couple of years. Looking here, the last time I wrote one was when I was a junior in college during the start of the pandemic, and even that post took a few months to write! I figured as a good way to get back into writing blog posts, I would talk about where I’ve been over the last couple of years; it’s almost 2023…

Reversing a PRNG: Mersenne Twisters

In my Network Security course, one of the things I worked on was an attack on a pseudo-random number generator (PRNG). In this case, my team had implemented a two factor authentication (2FA) server that generated tokens using Python’s random module. By attacking the random number generator, we were able to acquire all future two factor tokens given enough samples.
A Brief Background on…

Setting up a VPN Gateway

Beginnings At the start of the year, I was placed in a new living situation provided by the company I was interning with at the time. Everything was great, but I soon found out that the router was locked behind the ISP’s SSO, meaning I couldn’t edit any of the router settings. I wanted to be able to ssh into my desktop remotely, but being unable to port forward, I was out of luck.