Pruning Tarsnap Backups

I use Tarnsap to back up my data and I like it a lot, but it gets fairly expensive once you accumulate a lot of backups.At some point, I found prunef and started using it to prune my backups. It's a backup tool-agnostic utility that takes an unsorted list of backup filenames with … | Continue reading


@defn.io | 4 days ago

Announcing Remember for iOS

A little over four years ago, I released Remember for macOS, a small reminders app written using a combination of Swift and Racket. Today, I've released a version of Remember on the iOS App Store!I'd been meaning to get an iOS version going for a while, but ran into various issue … | Continue reading


@defn.io | 23 days ago

One Billion Row Challenge in Racket

I decided to have some fun tonight and work on a Racket solution to the One Billion Row Challenge. I came up with a (pretty gnarly) solution that completes in about 45 seconds on my machine, a 2023 12-core Apple M2 Max with 96GB of RAM. This is about on par with the lower end of … | Continue reading


@defn.io | 3 months ago

Extensible Linting for Racket

Several years ago, I released review, a little linter for Racket. Recently, I added support for extending the linter from arbitrary Racket packages.Review analyzes code by pattern-matching on input programs' surface-level syntax, rather than by analyzing their fully-expanded form … | Continue reading


@defn.io | 3 months ago

Advent of Racket 2023/07 - Camel Cards

Quite a fun one today. The example input looks like this:32T3K 765 T55J5 684 KK677 28 KTJJT 220 QQQJA 483 The first column represents a poker hand and the second a bid. We're to sort the hands, multiply the bid and the hand's rank (its position after sorting), then sum up the res … | Continue reading


@defn.io | 4 months ago

Advent of Racket 2023/06 - Wait For It

A really quick one today. The example input looks like this:Time: 7 15 30 Distance: 9 40 200 Every pair of rows represents a race, where the distance is the record distance so far. By pausing at the beginning of the race we gain one distance unit per time unit paused, but lose … | Continue reading


@defn.io | 4 months ago

Advent of Racket 2023/05 - Fertilizer

The example input for day five looks like this:seeds: 79 14 55 13 seed-to-soil map: 50 98 2 52 50 48 soil-to-fertilizer map: 0 15 37 37 52 2 39 0 15 fertilizer-to-water map: 49 53 8 0 11 42 42 0 7 57 7 4 water-to-light map: 88 18 7 18 25 70 light-to-temperature map: 45 77 23 81 4 … | Continue reading


@defn.io | 4 months ago

Advent of Racket 2023/04 - Scratchcards

Day four starts out very simple. We're given an input where we have two lists of numbers per line. Per line (or "card"), we get one point for the first number in the second list that is also found in the first, and the score doubles for every subsequent match. The example input l … | Continue reading


@defn.io | 5 months ago

Advent of Racket 2023/03 - Gear Ratios

Let's get right into day three. The first part of the puzzle today is to find any numbers adjacent to a non-numeric, non-period symbol in a table and add them all up. The example input looks like this:467..114.. ...*...... ..35..633. ......#... 617*...... .....+.58. ..592..... .. … | Continue reading


@defn.io | 5 months ago

Advent of Racket 2023/03 - Gear Ratios

Let's get right into day three. The first part of the puzzle today is to find any numbers adjacent to a non-numeric, non-period symbol in a table and add them all up. The example input looks like this: 467..114.. ...*...... ..35..633. ......#... 617*...... .....+.58. ..592..... . … | Continue reading


@defn.io | 5 months ago

Advent of Racket 2023/02 - Cube Conondrum

Today's puzzle was quick and easy. For the first part, we're to take a list of "games" as input where each game has an id and a set of semicolon-separated sets of plays and report the sum of the game ids where the sets match a certain condition. The example input looks like:Game … | Continue reading


@defn.io | 5 months ago

Advent of Racket 2023 - Day 01 - Trebuchet?!

The 2023 Advent of Code advent calendar has started and I'm doing it in Racket again this year. I'll probably stick with it for a couple of weeks or until the puzzles start taking me more than 10-15 minutes to finish. I've also decided to write some short posts about my solutions … | Continue reading


@defn.io | 5 months ago

Distributing Apps to the Mac App Store With GitHub Actions

This weekend, I decided to try and get Franz published on the Mac App Store. Since I'm already using GitHub Actions to build distributions for my customers, I figured I'd extend that same workflow to handle build submissions to the Mac App Store.Most of the steps are the same as … | Continue reading


@defn.io | 6 months ago

Franz for Windows

Today marks the first beta release of Franz for Windows!Franz is a desktop client for Apache Kafka.I had been planning to work on a Windows version of Franz since last year. Originally, I was going to implement the UI in C# (or possibly F# after a strong recommendation from Micha … | Continue reading


@defn.io | 6 months ago

Powered by •

Following in the long tradition of programmers writing blog engines instead of blogging, this site is now powered by Joel Dueck's Punct.I'd been meaning to make the switch ever since Joel posted a video of Punct in Practice to the Racket Discord and I finally took the plunge this … | Continue reading


@defn.io | 7 months ago

Restoring the Old Dashboard Feed on GitHub

A couple weeks ago, GitHub changed its Dashboard feed implementation and this new version has a lot less relevant information with respect to the repositories I follow compared to the old one. Fortunately, the old feed is still available at /dashboard-feed. So, for now, you can r … | Continue reading


@defn.io | 7 months ago

Restoring the Old Dashboard Feed on GitHub

A couple weeks ago, GitHub changed its Dashboard feed implementation and this new version has a lot less relevant information with respect to the repositories I follow compared to the old one. Fortunately, the old feed is still available at /dashboard-feed. So, for now, you can r … | Continue reading


@defn.io | 7 months ago

Distributing Mac Apps With GitHub Actions

This week, I spent some time automating the build & distribution process for Franz and I wanted to jot down some quick notes about how it works. Most of the steps are not specific to GitHub Actions so you could replace it by your favorite CI. The Workflow Take a look at the workf … | Continue reading


@defn.io | 7 months ago

Distributing Mac Apps With GitHub Actions

This week, I spent some time automating the build & distribution process for Franz and I wanted to jot down some quick notes about how it works. Most of the steps are not specific to GitHub Actions so you could replace it by your favorite CI. The Workflow Take a look at the workf … | Continue reading


@defn.io | 7 months ago

Franz now Source Available

The source code for Franz, a desktop client for Apache Kafka, is now available for all to read on on GitHub. One of my goals with writing my software in Racket is to help expand the Racket ecosystem. I try do that by making parts of the apps I write Open Source where possible1 an … | Continue reading


@defn.io | 8 months ago

Franz now Source Available

The source code for Franz, a desktop client for Apache Kafka, is now available for all to read on on GitHub. One of my goals with writing software in Racket is to help expand the Racket ecosystem. I try do that by making parts of the apps I write Open Source where possible1 and b … | Continue reading


@defn.io | 8 months ago

Deploying Racket Web Apps With Docker

Since there was a question about deploying Racket code using Docker on the Racket Reddit this morning, I figured I’d write a quick follow-up to my post about Deploying Racket Web Apps. My preference is still to avoid using Docker and just use the method described in that post by … | Continue reading


@defn.io | 11 months ago

Deploying Racket Web Apps With Docker

Since there was a question about deploying Racket code using Docker on the Racket Reddit this morning, I figured I'd write a quick follow-up to my post about Deploying Racket Web Apps. My preference is still to avoid using Docker and just use the method described in that post by … | Continue reading


@defn.io | 11 months ago

Breaking Racket

If you’ve looked at some of the concurrency and networking proceduresavailable in Racket, you might’ve noticed a bunch that follow thenaming pattern /enable-break and it might not have beenimmediately obvious why or when you would use these variants of theseprocedures over the re … | Continue reading


@defn.io | 1 year ago

Breaking Racket

If you've looked at some of the concurrency and networking procedures available in Racket, you might've noticed a bunch that follow the naming pattern /enable-break and it might not have been immediately obvious why or when you would use these variants of these procedures over th … | Continue reading


@defn.io | 1 year ago

Protohackers Challenge in Racket Part 2

I’m currently stuck waiting for a flight, so I figured I’d pick up where I left off yesterday 1 and implement a couple more of the Protohackers challenges. run-server Since the accept loop was common between all the challenges so far, I decided to extract and reuse it: 1 2 3 4 5 … | Continue reading


@defn.io | 1 year ago

Protohackers Challenge in Racket Part 2

I'm currently stuck waiting for a flight, so I figured I'd pick up where I left off yesterday 1 and implement a couple more of the Protohackers challenges. run-server Since the accept loop was common between all the challenges so far, I decided to extract and reuse it: (define (r … | Continue reading


@defn.io | 1 year ago

Protohackers Challenge in Racket Part 1

Someone on the Racket Discord recently mentioned the Protohackers project and I figured it’d be fun to write about Racket solutions to the challenges available on the website. 0: Smoke Test The 0th challenge is a basic echo server. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 … | Continue reading


@defn.io | 1 year ago

Protohackers Challenge in Racket Part 1

Someone on the Racket Discord recently mentioned the Protohackers project and I figured it'd be fun to write about Racket solutions to the challenges available on the website. 0: Smoke Test The 0th challenge is a basic echo server. #lang racket/base (require racket/match … | Continue reading


@defn.io | 1 year ago

Racketfest 2023 Talk: Native Apps with Racket

Racketfest 2023 was held yesterday and I gave a short talk about building native apps with Racket. Nothing new if you’ve read my recent posts, but below is a transcript. A recording might also be posted later, in which case I’ll update this post to link to it. Transcript Native A … | Continue reading


@defn.io | 1 year ago

Racketfest 2023 Talk: Native Apps with Racket

Racketfest 2023 was held yesterday and I gave a short talk about building native apps with Racket. Nothing new if you've read my recent posts, but below is a transcript. A recording might also be posted later, in which case I'll update this post to link to it. Transcript Native A … | Continue reading


@defn.io | 1 year ago

Announcing racket-protocol-buffers

A couple of releases back, I added support for schema registries to Franz. Some of its users use Protocol Buffers to serialize their data, so I needed to be able to support that use case. So, I wrote a parser for the proto2 and proto3 specs and a minimal serializer/deserializer i … | Continue reading


@defn.io | 1 year ago

Announcing racket-protocol-buffers

A couple of releases back, I added support for schema registries to Franz. Some of its users use Protocol Buffers to serialize their data, so I needed to be able to support that use case. So, I wrote a parser for the proto2 and proto3 specs and a minimal serializer/deserializer i … | Continue reading


@defn.io | 1 year ago

Safe Foreign Callouts from Racket to Swift

In anticipation of working on the Windows & Linux versions of Franz,I’ve wanted to move its auto-update implementation from Swift intoFranz’ Racket core. The reason I implemented the auto-update code inSwift in the first place is because of the way the Swift part normallycommuni … | Continue reading


@defn.io | 1 year ago

Safe Foreign Callouts from Racket to Swift

In anticipation of working on the Windows & Linux versions of Franz, I've wanted to move its auto-update implementation from Swift into Franz' Racket core. The reason I implemented the auto-update code in Swift in the first place is because of the way the Swift part normally comm … | Continue reading


@defn.io | 1 year ago

This is Fine

This post is a dumb rant, but I needed to vent into the aether. Please skip it. | Continue reading


@defn.io | 1 year ago

This is Fine

This post is a dumb rant, but I needed to vent. As I often do when I'm bored or procrastinating, I decided to update some of the software on my machine today. As usual, this was a mistake. I ran the following command: $ sudo port upgrade yubikey-manager ykpers And its output was … | Continue reading


@defn.io | 1 year ago

Announcing racket-{avro,iso-printf,lz4,messagepack}

Some of the feedback I’ve received on Franz so far has been that folks need support for more compression and serialization formats. In that vein, here are some Racket libraries I’ve released in the past couple of weeks: | Continue reading


@defn.io | 1 year ago

Announcing racket-{avro,iso-printf,lz4,messagepack}

Some of the feedback I've received on Franz so far has been that folks need support for more compression and serialization formats. In that vein, here are some Racket libraries I've released in the past couple of weeks: racket-avro (docs, src) -- an implementation of the Apache A … | Continue reading


@defn.io | 1 year ago

Announcing Franz

I’ve been using Apache Kafka for about a year now and I’ve wanted a desktop client from the beginning. I couldn’t find one I liked – the best I’ve found is Confluent’s Cloud UI, but that’s neither a desktop app, nor is it a great experience1 – so, a couple months ago I started bu … | Continue reading


@defn.io | 1 year ago

Announcing Franz

I've been using Apache Kafka for about a year now and I've wanted a desktop client from the beginning. I couldn't find one I liked -- the best I've found is Confluent's Cloud UI, but that's neither a desktop app, nor is it a great experience1 -- so, a couple months ago I started … | Continue reading


@defn.io | 1 year ago

#lang lua

I’m currently working on a macOS app that’s built with Racket and allows the user to write small scripts to process and filter some data. While Racket is definitely my preferred language and I could easily use it for these scripts, my target audience for this app would probably a … | Continue reading


@defn.io | 1 year ago

#lang lua

I'm currently working on a macOS app that's built with Racket and allows the user to write small scripts to process and filter some data. While Racket is definitely my preferred language and I could easily use it for these scripts, my target audience for this app would probably a … | Continue reading


@defn.io | 1 year ago

Screencast: SwiftUI + Racket

I’ve been playing with embedding Racket CS in desktop apps off and on for a while and today I recorded a little screencast demoing some of the stuff I’ve been working on. Here it is on YouTube: | Continue reading


@defn.io | 1 year ago

Screencast: SwiftUI + Racket

I've been playing with embedding Racket CS in desktop apps off and on for a while and today I recorded a little screencast demoing some of the stuff I've been working on. Here it is on YouTube: This is all pretty experimental and I'm just playing around, so nothing is particularl … | Continue reading


@defn.io | 1 year ago

Announcing racket-crontab

Earlier this week, Jesse Alama brought up the topic of scheduling cron jobs with koyo and we both agreed that it would be nice if koyo had built-in support for that sort of thing. So, I wrote crontab, a little library for parsing cron-style schedules and executing code based on t … | Continue reading


@defn.io | 1 year ago

Announcing racket-crontab

Earlier this week, Jesse Alama brought up the topic of scheduling cron jobs with koyo and we both agreed that it would be nice if koyo had built-in support for that sort of thing. So, I wrote crontab, a little library for parsing cron-style schedules and executing code based on t … | Continue reading


@defn.io | 1 year ago

Announcing racket-kafka

For the past month or so, I’ve been working on implementing a pure-Racket client for Apache Kafka. Yesterday, it reached a point where it can do the bare minimum you would expect from it: produce data and join consumer groups to consume data. Kafka has a fairly large feature-set … | Continue reading


@defn.io | 2 years ago