Huey
October 23, 2024

Julia Evans

Some notes on upgrading Hugo

Warning: this is a post about very boring yakshaving, probably only of interest to people who are trying to upgrade Hugo from a very old version to a new version. But what are blogs for if not documenting one’s very boring yakshaves from time to time? So yesterday I decided to try to upgrade Hugo. There’s no real reason to do this – I’ve been using Hugo version 0.40 to generate this blog since 2018, it works fine, and I...

16 days ago

Julia Evans

Terminal colours are tricky

Yesterday I was thinking about how long it took me to get a colorscheme in my terminal that I was mostly happy with (SO MANY YEARS), and it made me wonder what about terminal colours made it so hard. So I asked people on Mastodon what problems they’ve run into with colours in the terminal, and I got a ton of interesting responses! Let’s talk about some of the problems and a few possible ways to fix them. problem 1:...

22 days ago

Julia Evans

Some Go web dev notes

I spent a lot of time in the past couple of weeks working on a website in Go that may or may not ever see the light of day, but I learned a couple of things along the way I wanted to write down. Here they are: go 1.22 now has better routing I’ve never felt motivated to learn any of the Go routing libraries (gorilla/mux, chi, etc), so I’ve been doing all my routing by hand, like this. //...

26 days ago

Julia Evans

Reasons I still love the fish shell

I wrote about how much I love fish in this blog post from 2017 and, 7 years of using it every day later, I’ve found even more reasons to love it. So I thought I’d write a new post with both the old reasons I loved it and some reasons. This came up today because I was trying to figure out why my terminal doesn’t break anymore when I cat a binary to my terminal, the answer was “fish fixes...

about 1 month ago

Julia Evans

Migrating Mess With DNS to use PowerDNS

About 3 years ago, I announced Mess With DNS in this blog post, a playground where you can learn how DNS works by messing around and creating records. I wasn’t very careful with the DNS implementation though (to quote the release blog post: “following the DNS RFCs? not exactly”), and people started reporting problems that eventually I decided that I wanted to fix. the problems Some of the problems people have reported were: domain names with underscores weren’t allowed, even...

2 months ago

Julia Evans

Go structs are copied on assignment (and other things about Go I'd missed)

I’ve been writing Go pretty casually for years – the backends for all of my playgrounds (nginx, dns, memory, more DNS) are written in Go, but many of those projects are just a few hundred lines and I don’t come back to those codebases much. I thought I more or less understood the basics of the language, but this week I’ve been writing a lot more Go than usual while working on some upgrades to Mess with DNS, and ran...

3 months ago

Julia Evans

Entering text in the terminal is complicated

The other day I asked what folks on Mastodon find confusing about working in the terminal, and one thing that stood out to me was “editing a command you already typed in”. This really resonated with me: even though entering some text and editing it is a very “basic” task, it took me maybe 15 years of using the terminal every single day to get used to using Ctrl+A to go to the beginning of the line (or Ctrl+E for...

4 months ago

Julia Evans

Reasons to use your shell's job control

Hello! Today someone on Mastodon asked about job control (fg, bg, Ctrl+z, wait, etc). It made me think about how I don’t use my shell’s job control interactively very often: usually I prefer to just open a new terminal tab if I want to run multiple terminal programs, or use tmux if it’s over ssh. But I was curious about whether other people used job control more often than me. So I asked on Mastodon for reasons people use job...

4 months ago

Julia Evans

New zine: How Git Works!

Hello! I’ve been writing about git on here nonstop for months, and the git zine is FINALLY done! It came out on Friday! You can get it for $12 here: https://wizardzines.com/zines/git, or get an 14-pack of all my zines here. Here’s the cover: the table of contents Here’s the table of contents: who is this zine for? I wrote this zine for people who have been using git for years and are still afraid of it. As always – I...

5 months ago

Julia Evans

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: sometimes I actually am confused by the error messages, I’m just used to being confused I have a bunch of strategies for getting more information when the error message...

7 months ago

Julia Evans

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 anyone, just to write about something different for a day. I thought those posts were fun so here is a post with some notes on learning to crochet tiny cacti. first, the cacti I’ve been trying to do some non-computer hobbies, without putting a lot of pressure on myself to...

7 months ago

Julia Evans

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 people run into with git (like “have you lost work because of a git problem in the last year or two?”) which terminology people find confusing (like “how confident...

7 months ago

Julia Evans

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 glossary defines it. It’s what git status says on the first line It’s what you most recently checked out with git checkout or git switch It’s what’s in...

7 months ago

Julia Evans

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 surprised that people were so unconfident about their understanding – I’d been thinking of HEAD as a pretty straightforward topic. Usually when people say that a topic is confusing when I...

8 months ago

Julia Evans

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 asked about people’s favourite git config options on Mastodon: what are your favourite git config options to set? Right now I only really have git config push.autosetupremote true and git...

8 months ago

Julia Evans

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, it’s nontrivial to even realize that your main has diverged from the remote main (git will often just give you an intimidating but generic error message like ! [rejected] main ->...

9 months ago

Julia Evans

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://github.com/jvns/inside-git if you want to run all these examples yourself. Here’s a table of contents: HEAD: .git/head branch: .git/refs/heads/main commit: .git/objects/10/93da429… tree: .git/objects/9f/83ee7550… blobs: .git/objects/5a/475762c… reflog: .git/logs/refs/heads/main remote-tracking branches:...

9 months ago

Julia Evans

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! I can look it up!), but it’s been much harder to figure out how other people think about commits. So like I’ve been doing a lot recently, I went on Mastodon and started asking some questions. how do...

10 months ago

Julia Evans

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 server in a chaotic way separately from Ansible, so in the end I had no real idea of what was on that server and it felt like...

10 months ago

Julia Evans

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 once we’d explained how integers and floats were represented in memory the zine was already long enough, so we just kept it to integers and floats....

10 months ago

Julia Evans

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 install a kernel extension, and Mac OS seems to be making it harder and harder to install kernel extensions for security reasons. Also I had a...

11 months ago

Julia Evans

git branches: intuition & reality

Hello! I’ve been working on writing a zine about git so I’ve been thinking about git branches a lot. 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 post I want to briefly talk about an intuitive mental model I think many people have how git actually...

11 months ago

Julia Evans

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 examples of flake files and I ran into a few problems that were very confusing to me, so I wanted to write down some...

11 months ago

Julia Evans

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 about what I thought cherry-pick did (applying a patch), why that’s not quite true, and what it actually does instead (a “3-way merge”). This post is extremely in the weeds...

12 months ago

Julia Evans

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’ve found that if many people have a very strong opinion that’s different from mine, usually it’s because they have different experiences around that thing from me....

12 months ago

Julia Evans

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 confusing? thinking of writing a blog post that explains some of git’s weirder terminology: “detached HEAD state”, “fast-forward”, “index/staging area/staged”, “ahead of ‘origin/main’ by 1 commit”, etc I got...

12 months ago

Julia Evans

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 clearly before. The facts are: the “index”, “staging area” and “–cached” are all the same thing the stash is a bunch of commits not all references are branches or tags merge...

about 1 year ago

Julia Evans

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 video the transcript Hello, Strange Loop! Strange Loop is one of the first places I spoke almost 10 years ago and I'm so honored...

about 1 year ago

Julia Evans

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 it contains a file called content/post/2019-06-28-brag-doc.markdown. Where is that in my .git folder? And where are the old versions of that file? Let’s investigate...

about 1 year ago

Julia Evans

Notes on using 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. I’ve found Mastodon quite a bit more confusing than Twitter because it’s a distributed system, so here are a few technical things I’ve learned about it over the last 10 months. I’ll mostly talk about what using a single-person server has been...

about 1 year ago

Julia Evans

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 the last year or three — what helped you? (no need to reply if you don’t remember, or if you’ve been using the command line comfortably...

about 1 year ago

Julia Evans

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, even if sometimes people are jerks. So I want to explain some tactics I use to try to make the comments on my posts more informative and useful to me, and to...

about 1 year ago

Julia Evans

Behind "Hello World" on Linux

Today I was thinking about – what happens when you run 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 some of what happens, and (much much more importantly!) explain some tools you can use to see what’s going on behind the scenes yourself. We’ll use readelf, strace, ldd, debugfs,...

about 1 year ago

Julia Evans

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 than 35 years!). It’s used in every website on the internet. And it’s pretty stable – in a lot of ways, it works the exact same way...

about 1 year ago

Julia Evans

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 works on Linux because it uses Linux namespaces (via bubblewrap) to sandbox nginx. And I’m working on another playground right now that uses bubblewrap too. This post is very short,...

over 1 year ago

Julia Evans

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 code but maybe it’ll be interesting to someone, and maybe someone will even build on it to make more playgrounds! I’d love to see an HAProxy playground...

over 1 year ago

Julia Evans

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 about some of the motivations for writing this zine! motivation 1: demystify binary I wrote this zine because I used to find binary data really impenetrable. There are all these 0s and 1s! What does...

over 1 year ago

Julia Evans

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 be an expert myth: posts need to be 100% correct myth: writing boring posts is bad myth: you need to explain every concept myth:...

over 1 year ago

Julia Evans

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 poke at. Here’s the link: >> Memory Spy << This is a companion to the “how integers and floats work” zine we’ve been working on, so the goal is mostly...

over 1 year ago

Julia Evans

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: >> Implement DNS in a Weekend << This project is a fun way to learn: How to parse a binary network protocol like DNS How DNS works behind the scenes (what’s...

over 1 year ago

Julia Evans

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 strategies I use 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 the slides and a transcript of (roughly) what I said in the talk. the video the transcript You all got this zine (How DNS...

over 1 year ago

Julia Evans

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 called integer.exposed, inspired by Bartosz Ciechanowski’s float.exposed. It’s a lot less elaborate than Mess With DNS, so I’ll keep this blog post short. the inspiration:...

over 1 year ago

Julia Evans

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. Compilers: godbolt compiler explorer by Matt Godbolt Shaders: shadertoy by Inigo Quilez and Pol Jeremias Arduino / IoT: wokwi from CodeMagic CSS/HTML/JS: CodePen by Chris Coyier, Alex Vasquez, and...

over 1 year ago

Julia Evans

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 past couple of years, I’ve worked a lot with Marie Flanagan to improve the process. In this post we’ll talk about: the custom site we built to...

over 1 year ago

Julia Evans

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, another size (like 4 or 6 or 16 bits) would work just as well 8 bits is objectively the Best Option for some reason, even if history had played...

over 1 year ago

Julia Evans

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. There are probably some mistakes in here. I started by complaining on Mastodon: are there any guides to nix that start from the bottom up (for example starting with this bash script and then working up the layers of abstraction) instead of from the top down? all of the...

over 1 year ago

Julia Evans

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 because I felt like it was spending too much time upgrading when I installed new packages, and so I thought – maybe I’ll try the nix package manager! nix has a reputation for being confusing (it has its whole own programming language!), so I’ve...

over 1 year ago

Julia Evans

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 it frustrating that some frontend Javascript libraries require that you use a build system. I’m writing this because most of the writing I see about JS assumes...

over 1 year ago

Julia Evans

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 copy should already have shipped. Some people have told me that they already received theirs! Email me if you haven’t gotten the shipping confirmation. some pictures Here are some...

over 1 year ago

Julia Evans

Why does 0.1 + 0.2 = 0.30000000000000004?

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 floating point calculations are inexact, and I know that you can’t exactly represent 0.1 in binary, but: there’s a floating point number that’s closer to 0.3 than 0.30000000000000004! So why do we get the answer 0.30000000000000004? If you don’t feel...

over 1 year ago

Julia Evans

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 run into problems. So I asked on Mastodon again for examples of integer problems and got all kinds of great responses again. Here’s a table of contents. example 1: the...

almost 2 years ago

Julia Evans

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 (x + (y + z) is different from (x + y) + z) if you add very big values to very small values, you can get inaccurate results (the small numbers get lost!) you can’t represent very large integers as...

almost 2 years ago

Julia Evans

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 zines – I don’t do sponsorships or consulting or commissions or anything. print vs digital sales This year 58% of sales were digital and 42% were print. I’m really happy with this: when...

almost 2 years ago

Julia Evans

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: the table of contents Here’s the table of contents! A few people mentioned that they were printing it out, so I made a PDF poster version if you want to print it: Printable table of...

almost 2 years ago

Julia Evans

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, and I’m pretty happy with how it came out. Here it is as an image, and as text (with some extra explanations) 1. Inspect, don’t squash When you...

almost 2 years ago

Julia Evans

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 blog post. I’m going to talk about log analysis in the context of distributed systems debugging (you have a bunch of servers with different log files...

almost 2 years ago