New Look for GNOME Maps! 10 February 2024

If you follow me on Mastodon, you’ve probably seen plenty of screenshots of the new map style I’ve been working on. Now that it’s been merged (just in time for GNOME 46!), I think it’s time to give it a proper introduction and explain some of the design decisions I made along the way.

Further Adventures in Vector Maps 24 May 2023

It's been almost a year since I last posted about maps, so I figure it's time for an update!

Labelling Maps is Surprisingly Hard 18 June 2022

Or, how I got libshumate to show street names and why it took me four months

If Blockchain Is "Perfectly Secure," Why Does It Keep Getting Hacked? 28 April 2022

Someone IRL asked me this question recently. I'm sure it's a common question, so I thought I'd write a quick explainer. The answer might not be obvious to those not versed in cybersecurity, but it cuts to the core of the problems with cryptocurrency.

Next Steps for Blueprint 12 April 2022

Blueprint is my markup language for creating GTK user interfaces. Since the last blog post, I and several contributors have fixed a number of bugs that have come up and added several bits of missing syntax. Thanks to everyone who’s contributed by reporting issues or submitting merge requests!

You can also support my work on Patreon.

Embedded Maps with ShumateSimpleMap 29 January 2022

The first alpha release of libshumate is out, and one of the notable new features is ShumateSimpleMap. If you just want to embed a map in your app without thinking too much about layers, copyright licenses, and viewports, ShumateSimpleMap is what you’re looking for.

Introducing Blueprint: A New Way to Craft User Interfaces 02 December 2021

In a recent blog post, I presented my latest project, a markup language for creating GTK user interfaces. I’m excited to announce it’s now ready to use!

Implementing Vector Tile Support in Libshumate 08 November 2021

It’s incredible how things that seem simple can be so complicated. Take a “simple” maps app. There’s geometry, design, typography, a 60-gigabyte database, and a lot of complicated algorithms. Every button you press has an astonishing maze of technology supporting it.

Platforms, Compatibility, and the Future of the Free Desktop 26 October 2021

If you’ve followed Linux (and particularly GNOME) development, you’ve probably heard the recent kind, well-meaning, respectful discussions about theming, extensions, customization, and the general direction of the Linux platform. Here’s my two cents as a GNOME developer.

A Markup Language for GTK 22 October 2021

GTK has an XML-based format for declaratively constructing user interface components, but I've wanted to make a dedicated markup language for quite a while. This is my new prototype.

Tutorial: Mobile App Development with GNOME Builder 06 August 2021

In my previous post, I described Builder’s new support for mobile device development. Here I’ll explain how to set it up on your favorite mobile Linux device.

Finishing GNOME Builder's Mobile Device Support 06 August 2021

Recently I've been working on libshumate, the new maps library for GTK 4. I used my PinePhone to test the feature, so I needed a way to quickly build libshumate and run it on the phone.

Visual Studio Code, Flatpak, and C#: A Guide 01 July 2021

It took me way too long to figure this out, so I figured I’d write a concise tutorial for anyone else who wants to do C# development using Visual Studio Code installed via flatpak.

Ok, but WHY is cryptocurrency so bad for the environment? 17 March 2021

Cryptocurrency and especially NFTs (like “crypto art”) are the trendy new thing to talk about right now, and it makes sense: their power to change the world is tremendous. Of course, by “the world” I mean its climate, and I didn’t say it was a positive change.

Improving Tab Completion in Nautilus 17 February 2021

As a heavy keyboard user, I use the location entry in Nautilus quite often to get around my filesystem. But something about it frustrated me, so I fixed it.

Random Stuff

A bunch of random stuff I've made that's not particularly notable, but deserves a spot on my homepage nonetheless.


A Godot Engine addon that provides useful RNG utilities, including an efficient weighted random number generator and a function to shuffle arrays.

VR Color Picker

A virtual reality demo for Godot Engine that includes some basic VR UI patterns.


GeoClueless is a location faking tool for GeoClue2, the geolocation provider on many Linux distributions. GeoClueless is good for debugging location-aware applications.

Adapting GNOME Maps to Mobile Devices: Map Details 10 February 2021

Last year, I redesigned the info bubbles in GNOME Maps. Now I’ve made that bit of the UI adaptive, so that it fits on the screen of your favorite Linux phone!

GDScript's  _get() and  _set(): How and When to Use Them 27 December 2020

I recently found myself writing some very messy code in Godot Engine, and I wondered if I could improve it with a bit of GDScript magic.

Coding Custom Widgets with GTK 3 and GJS 24 November 2020

GTK provides a lot of useful widgets, but it inevitably can’t cover every possible use case. What if, for example, you need an image widget that resizes itself based on the available width, and clips its corners to fit in a popover? Fortunately, GTK makes it easy to create your own widgets that do whatever you want.

New in GNOME 40: Map Details! 17 November 2020

I’ve contributed to quite a few GNOME apps over the years, but Maps is the one I keep going back to. It’s a pretty easy codebase, and I’m a huge map nerd.


I don't have the attention span or the artistic talent to make complicated games, but I still enjoy it. All my games are made with Godot Engine, a super awesome open-source game engine.

Still Another Asteroid Shooter

My first Android game. Don't expect too much of it, it's just a simple, ad-free asteroid shooting game.


Tap the colored tiles in order. That's literally the whole game.