About Me

My name is Jakob Kreuze (/​ˈdʒeɪkəb ˈkɹuz/ and /​ˈjaːkɔp ˈkʁɔʏ̯tsə/ are both acceptable pronunciations), and I'm a 26 year-old cybersecurity professional living in the Commonwealth of Virginia. Outside of work, I like to program and tinker with free software, reverse engineer things, and hunt for security vulnerabilities. In the past, I've used the traditional definition of "hacker" to describe myself. These days, the vernacular meaning is a bit more accurate.

The best way to contact me is by email at zerodaysfordays (at) ‌​‌‌‌​‌‌‍‌​‌‌​​​​‍‌​‌‌​​​‌‍‌‌​‌‌​​​‍‌​‌​‌​‌‌‍‌‌​‌‌‌‌‌‍‌​‌‌‌​​‌‍‌​‌​‌​‌​‍‌​‌‌‌‌​​‍‌​‌‌​‌​​‍‌​‌‌​‌‌​‍‌​‌‌​​​‌‍‌​‌‌‌​​​‍‌‌​‌‌‌‌‌‍‌​‌​‌‌​​‍‌​‌​‌‌‌‌‍‌​‌‌‌‌‌​‍‌​‌‌​​‌​‍‌‌​‌‌‌‌‌‍‌​‌‌​​‌​‍‌​‌‌‌​‌​sdf.org. My GPG key fingerprint is 6581 A4FC 404F 6434 AEA3 008C 45ED 4DC3 05BA DA33. I'm also on Signal as @B4D.455.

In general, I opt for "jakob" as a handle, settling for "0daysfordays" or "zerodaysfordays" if "jakob" was taken. Not every account with one of those handles is mine!

Rich Presence

Recent Articles

» Tagged: writeup, security, wirednet

cgit as an Unintentional Honeypot

On a whim, I recently migrated all of my Git repositories to a cgit instance on WIREDNET. It's caused some headaches because the server-side rendering can be quite resource intensive. Mere minutes after setting it up, the fans on my server spun up because the repos were being scraped by ClaudeBot and friends. I hadn't linked to it from anywhere, so it's likely they found it from LetsEncrypt's issuance logs. It was easy enough to mitigate the scraping by putting a robots.txt up, and I was able to forget about it for a month or so, until I was sitting at work and got an alert from Gatus that several of my services were down. I checked the logs and saw that Apache was being hammered by 47.76.0.0/14 (no name provided) and 47.80.0.0/13 (Alibaba Cloud LLC), which I blocked at the firewall level. This was enough to mitigate the attack, but I was still seeing an unusual amount of traffic in my Apache logs. cgit was, once again, being aggressively scraped. Most of my repositories are small, but I had a mirror of Guix from when I was doing GSOC, and forks of a few other popular repositories, and the crawlers were just going through every single link generated by cgit (basically encompassing the entire source tree for every single commit in the repository). I was reminded of Konstantin Ryabitsev's blog post "Creepy Crawlies", which contains this helpful piece of intuition: "if [an IP is] asking for an old commit in a random old fork, it's probably not a real developer trying to do their work." I don't see any reason that someone would be looking that far into a Guix mirror that's several years out of date, so I wrote a fail2ban rule.

read more →

» Tagged: opinion, programming, scheme, guile

Eschewing An Established Convention Because We Can

Nearly every programming language has some flavor of "structure" declaration, where the programmer can conjure a new type representing the composition of other primitive types or structures, neatly organized into named fields. While the concept is practically universal, the way the programmer defines and interacts with these types can vary dramatically between languages. In Scheme, such structures are called "records". I found that the existing facilities left a lot to be desired, so I wrote a few macros to provide an experience more akin to Common Lisp.

read more →

» Tagged: writeup, 3d-printing, electronics, hardware

USB-PD Is Pretty Cool

Packed lunches are a great way to save money, but being limited to foods palatable at room temperature (or colder) can be a little discouraging. In most American workplaces, a microwave oven is readily available in the breakroom, making it easy to reheat a home-cooked meal. However, after leaving a desk-bound white-collar job for one that often takes me into the field, that's only occasionally an option. So I DIY'd a device for warming up food that's portable and usable in almost any situation.

read more →

Selected Works

Click a thumbnail to view project details.

About This Website

This is my personal website for showcasing the things I make. Currently, that is long-form writing in the form of blog posts.

The website is built using the Haunt static site generator, but features some dynamic components that use Guile's (http server) module. The source code is available on Forge (cgit). It started in 2015 as tsar-fox.com and was written in Python using the Flask web framework. In late 2018, I dropped that code base and began using the Hugo static site generator until mid 2019 when I began using Haunt. The Wayback Machine has several snapshots reaching back to December of 2016.

I am not currently aware of any attempts to censor this website. Nonetheless, I maintain mirrors on Tor and I2P should you have difficulty accessing this website in your locality.

I aim to be as transparent as possible about the use of generative artificial intelligence on this website. Unless stated otherwise, all text and source code is written by myself.

Licensing information for this website, including Javascript licenses, is available here.