Notes on git's error messages

While writing about Git, I’ve noticed that a lot of folks struggle with Git’s error messages. I’ve had many years to get used to these error messages so it took me a really long time to understand why folks were confused, but having thought about it much more, I’ve realized that: … | Continue reading


@jvns.ca | 17 days ago

Making crochet cacti

I noticed some tech bloggers I follow have been making April Cools Day posts about topics they don’t normally write about (like decaf or microscopes). The goal isn’t to trick the reader, just to write about something different for a day. I thought those posts were fun so here is … | Continue reading


@jvns.ca | 26 days ago

Some Git poll results

A new thing I’ve been trying while writing this Git zine is doing a bunch of polls on Mastodon to learn about: which git commands/workflows people use (like “do you use merge or rebase more?” or “do you put your current git branch in your shell prompt?”) what kinds of problems pe … | Continue reading


@jvns.ca | 1 month ago

The "current branch" in git

Hello! I know I just wrote a blog post about HEAD in git, but I’ve been thinking more about what the term “current branch” means in git and it’s a little weirder than I thought. four possible definitions for “current branch” It’s what’s in the file .git/HEAD. This is how the git … | Continue reading


@jvns.ca | 1 month ago

How HEAD works in git

Hello! The other day I ran a Mastodon poll asking people how confident they were that they understood how HEAD works in Git. The results (out of 1700 votes) were a little surprising to me: 10% “100%” 36% “pretty confident” 39% “somewhat confident?” 15% “literally no idea” I was … | Continue reading


@jvns.ca | 1 month ago

Popular git config options

Hello! I always wish that command line tools came with data about how popular their various options are, like: “basically nobody uses this one” “80% of people use this, probably take a look” “this one has 6 possible values but people only really use these 2 in practice” So I as … | Continue reading


@jvns.ca | 2 months ago

Dealing with diverged git branches

Hello! One of the most common problems I see folks struggling with in Git is when a local branch (like main) and a remote branch (maybe also called main) have diverged. There are two things that make this situation hard: If you’re not used to interpreting git’s error messages, i … | Continue reading


@jvns.ca | 2 months ago

Inside .git

Hello! I posted a comic on Mastodon this week about what’s in the .git directory and someone requested a text version, so here it is. I added some extra notes too. First, here’s the image. It’s a ~15 word explanation of each part of your .git directory. . You can git clone https: … | Continue reading


@jvns.ca | 3 months ago

Do we think of git commits as diffs, snapshots, and/or histories?

Hello! I’ve been extremely slowly trying to figure how to explain every core concept in Git (commits! branches! remotes! the staging area!) and commits have been surprisingly tricky. Understanding how git commits are implemented feels pretty straightforward to me (those are facts … | Continue reading


@jvns.ca | 3 months ago

Some notes on NixOS

Hello! Over the holidays I decided it might be fun to run NixOS on one of my servers, as part of my continuing experiments with Nix. My motivation for this was that previously I was using Ansible to provision the server, but then I’d ad hoc installed a bunch of stuff on the serve … | Continue reading


@jvns.ca | 3 months ago

2023: Year in review

Hello! This was my 4th year working full time on Wizard Zines! Here are a few of the things I worked on this year. a zine! I published How Integers and Floats Work, which I worked on with Marie. This one started out its life as “how your computer represents things in memory”, but … | Continue reading


@jvns.ca | 3 months ago

Mounting git commits as folders with NFS

Hello! The other day, I started wondering – has anyone ever made a FUSE filesystem for a git repository where all every commit is a folder? It turns out the answer is yes! There’s giblefs, GitMounter, and git9 for Plan 9. But FUSE is pretty annoying to use on Mac – you need to in … | Continue reading


@jvns.ca | 4 months ago

git branches: intuition & reality

Hello! I’ve been thinking about git branches a lot, and I keep hearing from people that they find the way git branches work to be counterintuitive. It got me thinking: what might an “intuitive” notion of a branch be, and how is it different from how git actually works? So in this … | Continue reading


@jvns.ca | 5 months ago

Some notes on nix flakes

I’ve been using nix for about 9 months now. For all of that time I’ve been steadfastly ignoring flakes, but everyone keeps saying that flakes are great and the best way to use nix, so I decided to try to figure out what the deal is with them. I found it very hard to find simple e … | Continue reading


@jvns.ca | 5 months ago

How git cherry-pick and revert use 3-way merge

Hello! I was trying to explain to someone how git cherry-pick works the other day, and I found myself getting confused. What went wrong was: I thought that git cherry-pick was basically applying a patch, but when I tried to actually do it that way, it didn’t work! Let’s talk abou … | Continue reading


@jvns.ca | 5 months ago

git rebase: what can go wrong?

Hello! While talking with folks about Git, I’ve been seeing a comment over and over to the effect of “I hate rebase”. People seemed to feel pretty strongly about this, and I was really surprised because I don’t run into a lot of problems with rebase and I use it all the time. I’v … | Continue reading


@jvns.ca | 5 months ago

Confusing git terminology

Hello! I’m slowly working on explaining git. One of my biggest problems is that after almost 15 years of using git, I’ve become very used to git’s idiosyncracies and it’s easy for me to forget what’s confusing about it. So I asked people on Mastodon: what git jargon do you find … | Continue reading


@jvns.ca | 5 months ago

Some miscellaneous git facts

I’ve been very slowly working on writing about how Git works. I thought I already knew Git pretty well, but as usual when I try to explain something I’ve been learning some new things. None of these things feel super surprising in retrospect, but I hadn’t thought about them clear … | Continue reading


@jvns.ca | 6 months ago

New talk: Making Hard Things Easy

A few weeks ago I gave a keynote at Strange Loop called Making Hard Things Easy. It’s about why I think some things are hard to learn and ideas for how we can make them easier. Here’s the video, as well as the slides and a transcript of (roughly) what I said in the talk. the vide … | Continue reading


@jvns.ca | 6 months ago

In a git repository, where do your files live?

Hello! I was talking to a friend about how git works today, and we got onto the topic – where does git store your files? We know that it’s in your .git directory, but where exactly in there are all the versions of your old files? For example, this blog is in a git repository, and … | Continue reading


@jvns.ca | 7 months ago

Notes on running a single-person Mastodon server

I started using Mastodon back in November, and it’s the Twitter alternative where I’ve been spending most of my time recently, mostly because the Fediverse is where a lot of the Linux nerds seem to be right now. Mastodon is quite a bit more confusing that Twitter because it’s a d … | Continue reading


@jvns.ca | 8 months ago

What helps people get comfortable on the command line?

Sometimes I talk to friends who need to use the command line, but are intimidated by it. I never really feel like I have good advice (I’ve been using the command line for too long), and so I asked some people on Mastodon: if you just stopped being scared of the command line in t … | Continue reading


@jvns.ca | 8 months ago

Some tactics for writing in public

Someone recently asked me – “how do you deal with writing in public? People on the internet are such assholes!” I’ve often heard the advice “don’t read the comments”, but actually I’ve learned a huge amount from reading internet comments on my posts from strangers over the years, … | Continue reading


@jvns.ca | 8 months ago

Behind "Hello World" on Linux

Today I was thinking about – what happens when you a simple “Hello World” Python program on Linux, like this one? print("hello world") Here’s what it looks like at the command line: $ python3 hello.py hello world But behind the scenes, there’s a lot more going on. I’ll describe … | Continue reading


@jvns.ca | 8 months ago

Why is DNS still hard to learn?

I write a lot about technologies that I found hard to learn about. A while back my friend Sumana asked me an interesting question – why are these things so hard to learn about? Why do they seem so mysterious? For example, take DNS. We’ve been using DNS since the 80s (for more tha … | Continue reading


@jvns.ca | 9 months ago

Lima: a nice way to run Linux VMs on Mac

Hello! Here’s a new entry in the “cool software julia likes” section. A little while ago I started using a Mac, and one of my biggest frustrations with it is that often I need to run Linux-specific software. For example, the nginx playground I posted about the other day only work … | Continue reading


@jvns.ca | 9 months ago

Open sourcing the nginx playground

Hello! In 2021 I released a small playground for testing nginx configurations called nginx playground. There’s a blog post about it here. This is an extremely short post to say that at the time I didn’t make it open source, but I am making it open source now. It’s not a lot of co … | Continue reading


@jvns.ca | 9 months ago

New zine: How Integers and Floats Work

Hello! On Wednesday, we released a new zine: How Integers and Floats Work! You can get it for $12 here: https://wizardzines.com/zines/integers-floats, or get an 13-pack of all my zines here. Here’s the cover: the table of contents Here’s the table of contents! Now let’s talk … | Continue reading


@jvns.ca | 10 months ago

Some blogging myths

A few years ago I gave a short talk (slides) about myths that discourage people from blogging. I was chatting with a friend about blogging the other day and it made me want to write up that talk as a blog post. here are the myths: myth: you need to be original myth: you need to … | Continue reading


@jvns.ca | 10 months ago

New playground: memory spy

Hello! Today we’re releasing a new playground called “memory spy”. It lets you run C programs and see how their variables are represented in memory. It’s designed to be accessible to folks who don’t know C – it comes with bunch of extremely simple example C programs that you can … | Continue reading


@jvns.ca | 11 months ago

Introducing "Implement DNS in a Weekend"

Hello! I’m excited to announce a project I’ve been working on for a long time: a free guide to implementing your own DNS resolver in a weekend. The whole thing is about 200 lines of Python, including implementing all of the binary DNS parsing from scratch. Here’s the link: >> Im … | Continue reading


@jvns.ca | 11 months ago

New talk: Learning DNS in 10 years

Here’s a keynote I gave at RubyConf Mini last year: Learning DNS in 10 years. It’s about how I like to learn hard things. I just noticed that they’d released the video the other day, so I’m just posting it now even though I gave the talk 6 months ago. Here’s the video, as well as … | Continue reading


@jvns.ca | 11 months ago

New playground: integer.exposed

Hello! For the last few months we’ve been working on a zine about how integers and floating point numbers work. Whenever I make a zine I like to release a playground to go with it, like mess with dns for the DNS zine or the sql playground. For this one, I made a simple playground … | Continue reading


@jvns.ca | 1 year ago

A list of programming playgrounds

I really like using (and making!) programming playgrounds, and I got thinking the other day about how I didn’t have a great list of playgrounds to refer to. So I asked on Mastodon for links to cool playgrounds. Here’s what I came up with. I’d love to know what I missed. Compiler … | Continue reading


@jvns.ca | 1 year ago

Building a custom site for zine feedback

Hello! A few years I wrote a post called A new way I’m getting feedback on my posts: beta readers! about how I’d started using beta readers. The basic strategy for getting feedback there was to email people a PDF and ask for feedback. This was kind of inefficient, and so over the … | Continue reading


@jvns.ca | 1 year ago

Some possible reasons for 8-bit bytes

I’ve been working on a zine about how computers represent thing in binary, and one question I’ve gotten a few times is – why does the x86 architecture use 8-bit bytes? Why not some other size? With any question like this, I think there are two options: It’s a historical accident … | Continue reading


@jvns.ca | 1 year ago

How do Nix builds work?

Hello! For some reason after the last nix post I got nerdsniped by trying to understand how Nix builds work under the hood, so here’s a quick exploration I did today. I started by complaining on Mastodon: are there any guides to nix that start from the bottom up (for example sta … | Continue reading


@jvns.ca | 1 year ago

Some notes on using nix

Recently I started using a Mac for the first time. The biggest downside I’ve noticed so far is that the package management is much worse than on Linux. At some point I got frustrated with homebrew, and so I thought – maybe I’ll try the nix package manager! nix has a reputation fo … | Continue reading


@jvns.ca | 1 year ago

Writing Javascript without a build system

Hello! I’ve been writing some Javascript this week, and as always when I start a new frontend project, I was faced with the question: should I use a build system? I want to talk about what’s appealing to me about build systems, why I (usually) still don’t use them, and why I find … | Continue reading


@jvns.ca | 1 year ago

Print copies of The Pocket Guide to Debugging have arrived

Hello! We released The Pocket Guide to Debugging back in December, and here’s a final update: the print copies are done printing and they’ve arrived at the warehouse, ready to ship to anyone who wants one. You can buy the print or PDF version now, and if you preordered it, your c … | Continue reading


@jvns.ca | 1 year ago

Why does 0.1 + 0.2 = 0.30000000000000004?

span { padding: 0 !important; } Hello! I was trying to write about floating point yesterday, and I found myself wondering about this calculation, with 64-bit floats: >>> 0.1 + 0.2 0.30000000000000004 I realized that I didn’t understand exactly how it worked. I mean, I know … | Continue reading


@jvns.ca | 1 year ago

Examples of problems with integers

Hello! A few days back we talked about problems with floating point numbers. This got me thinking – but what about integers? Of course integers have all kinds of problems too – anytime you represent a number in a small fixed amount of space (like 8/16/32/64 bits), you’re going to … | Continue reading


@jvns.ca | 1 year ago

Examples of floating point problems

Hello! I’ve been thinking about writing a zine about how things are represented on computers in bytes, so I was thinking about floating point. I’ve heard a million times about the dangers of floating point arithmetic, like: addition isn’t associative (0.1 + 0.2 is different from … | Continue reading


@jvns.ca | 1 year ago

Some business graphs for 2022

Hello! I like looking at other independent authors’ business graphs, so I thought I’d share some percentages and graphs of my own this year. Hopefully some of this is useful to other writers who run internet businesses. All of the graphs are about Wizard Zines’ business selling z … | Continue reading


@jvns.ca | 1 year ago

New zine: The Pocket Guide to Debugging

Hello! On Monday, we released a new zine: The Pocket Guide to Debugging! It has 47 of my favourite strategies for solving your sneakiest bugs. You can get it for $12 here: https://wizardzines.com/zines/debugging-guide, or get an 12-pack of all my zines here. Here’s the cover: t … | Continue reading


@jvns.ca | 1 year ago

A debugging manifesto

Hello! I’ve been working on a zine about debugging for the last 6 months with my friend Marie, and one of the problems we ran into was figuring out how to explain the right attitude to take when debugging. We ended up writing a short debugging manifesto to start the zine with, an … | Continue reading


@jvns.ca | 1 year ago

Tips for analyzing logs

Hello! I’ve been working on writing a zine about debugging for a while now (we’re getting close to finishing it!!!!), and one of the pages is about analyzing logs. I asked for some tips on Mastodon and got WAY more tips than could fit on the page, so I thought I’d write a quick b … | Continue reading


@jvns.ca | 1 year ago

A couple of Rust error messages

Hello! I’ve been doing Advent of Code in Rust for the past couple of days, because I’ve never really gotten comfortable with the language and I thought doing some Advent of Code problems might help. My solutions aren’t anything special, but because I’m trying to learn, I’ve been … | Continue reading


@jvns.ca | 1 year ago