Julia Evans
Writes jvns.ca, turning "hard and scary" topics — networking, debugging, Linux internals — into plain explanations and hand-drawn comics. Publishes Wizard Zines, illustrated programming zines. Software developer based in Montreal.
Julia Evans did not write this page. ppll compiled it from their own words, each linked to the source. Is this you? · Report a mistake
Latest Mastodon
What they believe
-
Sharing code between classes via inheritance in Python tends to produce a bad experience.
I've never had a good experience using inheritance in Python and I don't think I'll try to use it again.
jvns.caSaid 21 Jul 2026This on korrents
-
Changed their mind Tailwind is a good way to build a site you're happy with, even without strong CSS skills of your own.
Before I ended up making this site with Tailwind CSS, and it helped me make a site I felt pretty happy with my minimal CSS skills and just 2 evenings of work!
Now I’m a lot better at CSS than I was when I started using Tailwind Ultimately Tailwind is limiting: if you want to do Weird Stuff in your CSS, it’s not always possible with Tailwind. Those limits can be extremely useful (a lot of this post is about me reimplementing some of Tailwind’s limits!) but at this point I’d like to be able to pick and choose.
Said 15 May 2026This on korrents
The bold line is korrents’ wording; the quote is theirs. These one: what they wrote before what they said aloud, one per source, newest first.
Feed
As its own page →Hiding
15 October
13 October
10 October
9 October
7 October
5 October
3 October
2 October
1 October
29 September
27 September
23 September
22 September
1 September
17 August
6 August
22 July
21 July
From one piece Some more things about Django I've been enjoying 2 beliefs · jvns.ca
-
Their words
I've been running into a variety of performance issues (like this template caching thing) that are not because of slow queries, so instead it's been more useful for me so far to start by running a CPU profile.
-
korrents.com
Sharing code between classes via inheritance in Python tends to produce a bad experience.Their words
I've never had a good experience using inheritance in Python and I don't think I'll try to use it again.
17 July
-
Their words
I read a bunch of blog posts about how it is totally fine to use SQLite in production for a small site and I think it is totally fine, but what I did not fully appreciate is that SQLite is still a database, databases are complicated, and I do not know a lot about operating databases.
22 June
16 June
11 June
9 June
5 June
26 May
19 May
Nothing matches.
Beliefs
Korrents What they believe 4 beliefs, 2 changed minds — each backed by an exact quote.
Each is a — compiled by korrents.com, not by them: the one-line wordings are korrents', the quotes are theirs.
Recent
Sharing code between classes via inheritance in Python tends to produce a bad experience.
I've never had a good experience using inheritance in Python and I don't think I'll try to use it again.
Some more things about Django I've been enjoying Said 21 Jul 2026
When diagnosing a performance problem, starting with a CPU profile is more useful than checking database queries first.
I've been running into a variety of performance issues (like this template caching thing) that are not because of slow queries, so instead it's been more useful for me so far to start by running a CPU profile.
Some more things about Django I've been enjoying Said 21 Jul 2026
SQLite is a fine production database for a small site, but running it well is more complicated than the "SQLite in production is totally fine" blog posts make it sound.
I read a bunch of blog posts about how it is totally fine to use SQLite in production for a small site and I think it is totally fine, but what I did not fully appreciate is that SQLite is still a database, databases are complicated, and I do not know a lot about operating databases.
Learning a few things about running SQLite Said 17 Jul 2026
Show 1 more
When two expert users argue over whether documentation is clear, that debate is unproductive — the way to actually find unclear documentation is to test it on real readers, not to have experts argue about wording.
I don’t think this is very productive (expert users of a piece of software are notoriously bad at being able to tell if an explanation will be clear to non-experts), so I needed to find a way to identify problems with the man pages that was a little more evidence-based.
A data model for Git (and other docs updates) Said 8 Jan 2026
What is a korrent?
A korrent is a belief a person has stated in their own words: one sentence stating the claim, backed by a quote and a source, kept at korrents.com.
Under a name here, the quoted block is what they actually said. The korrent beneath it is the claim those words support, in korrents' wording — tap it to see the record, its source, and who else holds it.
Nobody here wrote their own korrents. They are compiled from public statements, and a person can change their mind, which is recorded too.
Recommends rcmnd
rcmnd What they recommend 17 things — each backed by an exact quote.
Compiled by rcmnd.app, not by them: the quotes are theirs, and each links to the post it was copied from.
Recent
Liked Helix
One of my favourite things about Helix is the search!
jvns.ca 10 Oct 2025
Loved fish shell
In 10 years of using fish I have never found a single thing I wanted to configure. It just works the way I want.
jvns.ca 12 Sept 2024
Loved Go standard library documentation
the Go standard library documentation is probably my favourite language reference
jvns.ca 17 Jan 2023
Show 14 more
Recommends TinyWM
TinyWM is where I’d start if I wanted to learn how a window manager works
jvns.ca 17 Jan 2023
Liked Nightmare
Nightmare – an intro to reverse engineering. I did a few problems and it was really fun.
jvns.ca 17 Jan 2023
Liked Cryptopals
Cryptopals – a set of exercises to learn cryptography by breaking it. Very fun.
jvns.ca 17 Jan 2023
Liked fast.ai
https://course.fast.ai/ is a free course on deep learning with PyTorch. It helped me get started with deep learning, though I didn’t get that far.
jvns.ca 17 Jan 2023
Liked Ruby Under a Microscope
Ruby Under a Microscope helped me when I was writing a Ruby profiler
jvns.ca 17 Jan 2023
Loved Designing Data-Intensive Applications
Designing Data-Intensive Applications by Martin Kleppmann is a book I still want to finish, but I loved what I read of it
jvns.ca 17 Jan 2023
What others say about Designing Data-Intensive Applications →
Read Hacking: The Art of Exploitation
Hacking: The Art of Exploitation by Jon Erickson taught me about ARP spoofing
jvns.ca 17 Jan 2023
Liked Ed Mastery
Ed Mastery was a really fun read even though I’m probably never going to use Ed.
jvns.ca 17 Jan 2023
Liked Networking for System Administrators
Networking for System Administrators by Michael Lucas helped networking click for me, even though I’m not a system administrator.
jvns.ca 17 Jan 2023
What others say about Networking for System Administrators →
Liked The Manager’s Path
The Manager’s Path by Camille Fournier. Helped me understand what a tech lead’s job is.
jvns.ca 17 Jan 2023
Liked The Linux Programming Interface
The Linux Programming Interface by Michael Kerrisk – an exhaustive reference on how Linux works. There are about a million chapters, but every individual chapter is pretty short and I find it quite readable.
jvns.ca 17 Jan 2023
Liked strace
strace is pretty broadly useful, but keep in mind it can really slow down your programs.
jvns.ca 3 Jul 2016
Loved dstat
There’s also iostat and netstat and atop and a bunch of other tools, but dstat is my favorite.
jvns.ca 3 Jul 2016
Loved perf
I like to use perf top no matter what language my programs are written in, just to see if I can understand anything from it.
jvns.ca 3 Jul 2016
Where they publish
Site Wizard Zines Illustrated zines explaining programming and Linux topics — her main business.
Self-published comic zines on topics like Linux debugging, Git, HTTP and Bash, sold from her own store. jvns.ca links to it directly and every page credits her by name.
Link verified 3 Sept 2026.
Blog jvns.ca Explains networking, debugging, Linux and dev tools in plain language, often with hand-drawn comics.
Her long-running programming blog — deep, friendly explainers on things like tcpdump, strace, DNS and "why is this slow", often illustrated with her own comics. Recent posts cover Django, SQLite and CSS.
Recent
- Replacing the old battery on rechargeable bike lights 27 Sept 2026 Hello! Recently I needed bike lights for my bike. And I remembered that I already had rechargeable bike lights that I bought ten years ago, that I hadn’t tried in a long time. I tried to recharge them, but after f…
- Some more things about Django I've been enjoying 21 Jul 2026 Hello! I’m on a funny journey right now where I’m trying to learn how to make websites in a sort of 2010 style, where I have an SQL database and render some HTML on the backend. It’s kind of an interes…
- Learning a few things about running SQLite 17 Jul 2026 Hello! I’ve been working on a Django site recently, and I decided to use SQLite as the database. When I was getting started with using SQLite as database for a website I read a bunch of blog posts about how it is…
Show 17 more
- Moving away from Tailwind, and learning to structure my CSS 15 May 2026 Hello! 8 years ago, I wrote excitedly about discovering Tailwind. At that time I really had no idea how to structure my CSS code and given the choice between a pile of complete chaos and Tailwind, I was really happy to…
- Links to CSS colour palettes 4 May 2026 A while back I decided to stop using Tailwind for new projects and to just write vanilla CSS instead. But one thing I missed about Tailwind was the colour palette (here as CSS). If I wanted a light blue I could just use…
- Testing Vue components in the browser 2 May 2026 Hello! One of my long term projects on here is figuring out how to write frontend Javascript without using Node or any other server JS runtime. One issue I run into a lot in my frontend JS projects is that I don’t…
- Examples for the tcpdump and dig man pages 10 Mar 2026 Hello! My big takeaway from last month’s musings about man pages was that examples in man pages are really great, so I worked on adding (or improving) examples to two of my favourite tools’ man pages. Here t…
- Notes on clarifying man pages 18 Feb 2026 Hello! After spending some time working on the Git man pages last year, I’ve been thinking a little more about what makes a good man page. I’ve spent a lot of time writing cheat sheets for tools (tcpdump, gi…
- Some notes on starting to use Django 27 Jan 2026 Hello! One of my favourite things is starting to learn an Old Boring Technology that I’ve never tried before but that has been around for 20+ years. It feels really good when every problem I’m ever going to…
- A data model for Git (and other docs updates) 8 Jan 2026 Hello! This past fall, I decided to take some time to work on Git’s documentation. I’ve been thinking about working on open source docs for a long time – usually if I think the documentation for someth…
- Notes on switching to Helix from vim 10 Oct 2025 Hello! Earlier this summer I was talking to a friend about how much I love using fish, and how I love that I don’t have to configure it. They said that they feel the same way about the helix text editor, and so I…
- New zine: The Secret Rules of the Terminal 26 Jun 2025 Hello! After many months of writing deep dive blog posts about the terminal, on Tuesday I released a new zine called “The Secret Rules of the Terminal”! You can get it for $12 here: https://wizardzines.com/z…
- Using `make` to compile C programs (for non-C-programmers) 10 Jun 2025 I have never been a C programmer but every so often I need to compile a C/C++ program from source. This has been kind of a struggle for me: for a long time, my approach was basically “install the dependencies, run…
- Standards for ANSI escape codes 7 Mar 2025 Hello! Today I want to talk about ANSI escape codes. For a long time I was vaguely aware of ANSI escape codes (“that’s how you make text red in the terminal and stuff”) but I had no real understanding…
- How to add a directory to your PATH 13 Feb 2025 I was talking to a friend about how to add a directory to your PATH today. It’s something that feels “obvious” to me since I’ve been using the terminal for a long time, but when I searched for in…
- Some terminal frustrations 5 Feb 2025 A few weeks ago I ran a terminal survey (you can read the results here) and at the end I asked: What’s the most frustrating thing about using the terminal for you? 1600 people answered, and I decided to spend a few days…
- What's involved in getting a "modern" terminal setup? 11 Jan 2025 Hello! Recently I ran a terminal survey and I asked people what frustrated them. One person commented: There are so many pieces to having a modern terminal experience. I wish it all came out of the box. My immediate rea…
- "Rules" that terminal programs follow 12 Dec 2024 Recently I’ve been thinking about how everything that happens in the terminal is some combination of: Your operating system’s job Your shell’s job Your terminal emulator’s job The job of whatever…
- Why pipes sometimes get "stuck": buffering 29 Nov 2024 Here’s a niche terminal problem that has bothered me for years but that I never really understood until a few weeks ago. Let’s say you’re running this command to watch for some specific output in a log…
- Importing a frontend Javascript library without a build system 18 Nov 2024 I like writing Javascript without a build system and for the millionth time yesterday I ran into a problem where I needed to figure out how to import a Javascript library in my code without using a build system, and it…
Link verified 3 Sept 2026. Recent items update automatically from the channel.
Mastodon @b0rk@social.jvns.ca Short posts about programming, zines and her work.
Recent
- `git merge` poll: when you create a merge commit, do you edit the commit message or just leave it as the default? 15 Oct 2026
- working on 4 “characters” who are learning Git for the first time, to explain how Git branches work trying to figure out if there are any major characters I’m missing (the idea is to give an example of how each of them might use branches, like Emilia might just be running `git push` to back up her thesis) 15 Oct 2026
- why might someone want to learn Git? wrong answers only 13 Oct 2026
Show 17 more
- RE: https://mastodon.green/@solar_chase/117416542106532198 after reading one of the previous threads I bought the author’s book and it was a super interesting way to learn about solar power 10 Oct 2026
- When you use Git to collaborate, how do you send other people your code changes? you can pick more than one (just skip this one if you don’t use Git to collaborate) 9 Oct 2026
- dumb git question: in a merge-based workflow, if you’re working on a branch, is there any reasonable way to integrate new changes from `main` back into your branch without using `git rebase`? I have this belief that there are people who only use merge commits and not rebase but I don’t understand how that works (do you just use `git merge main`? if so do you get confused by all the merge commits that creates or is it okay?) 7 Oct 2026
- this week I learned that during a merge conflict, you can get a list of all commits involved in the conflict that touched a file with: $ git log --merge FILENAME Seems useful if there are a lot of commits being merged (like in a big rebase) but only a couple of them touched that file 7 Oct 2026
- Thinking this morning about how much of teaching is just taking the time to listen. Hearing what someone’s actual computer problem is and then addressing it is so much harder than just telling them what I think is interesting or cool. And sometimes I don’t know the answer to their actual problem, and I might not even know how to find out, and that feels bad! But it’s okay to just say “I don’t know” :) 7 Oct 2026
- has anyone written a man page SYNOPSIS parser that somehow (?? I have no idea what I mean by this) helps folks understand what they mean? I was talking to a friend the other day who said they were having a hard time understanding the rules of the SYNOPSIS format and I realized I’d never even seen it explained anywhere. the main thing that comes to mind is https://explainshell.com/ (which is not always accurate but a very cool project) 5 Oct 2026
- RE: https://hachyderm.io/@molly0xfff/117374213919135553 finally signed up for a paid subscription to support Molly White’s cryptocurrency reporting loved her 2024 talk on the how building things on the web is magic too 3 Oct 2026 xoxofest.com
- one of the many good things about asking people questions instead of LLMs is that today i had a question about a project so i went to the discord to ask and the person said “oh no the software doesn’t do that but maybe we could change it so that it could” (obviously asking people doesn’t always go well too, i have had many bad experiences with this approach too! it’s very messy!) 2 Oct 2026
- I’m working on a list of questions you might want to ask about the Git workflow when joining a new team https://gist.github.com/jvns/600e510958c4b9444b93bec84fd1a5f3 Would love ideas for other questions that would be useful to know the answer to! 2 Oct 2026
- one thing about making a Django site is that dealing with these residential proxy scrapers is tough. It’s definitely easier to handle with a Go server that’s faster or a static site. The site doesn’t even have anything useful to scrape! I don’t really want to use Anubis since it’s a bit annoying for users so I’ve been doing a lot of aggressive IP blocking but it doesn’t feel great. (not really looking for advice atm) 1 Oct 2026
- Is there a QR code generator that 1. is a website 2. is free, no account needed 3. is not secretly also a link shortener (no “dynamic QR codes”) 4. does not look like a scam 5. does not include extra branding (the way the Chrome one does) a friend just asked me this and I really could not find one (edit: many people are recommending https://justaqrcode.com/ which looks great, gonna mute this conversation now) 29 Sept 2026
- replacing the old battery on rechargeable bike lights 27 Sept 2026 jvns.ca
- another git push/pull questionl: how do you usually set an upstream for branches that you create? you can pick more than one (also I really appreciate everyone answering all these polls, I hope it is fun for you) 24 Sept 2026
- poll: when you run `git pull`, do you pass the name of the remote/branch (like `git pull origin main`) or just `git pull`? (you can pick more than one) 24 Sept 2026
- poll: in Git, do you ever use any of the references `MERGE_HEAD`, `REBASE_HEAD`, `CHERRY_PICK_HEAD`, `ORIG_HEAD`, `FETCH_HEAD`, or `REVERT_HEAD` etc? (and if so, what do you use them for?) 23 Sept 2026
- periodic reminder that Wizard Zines has an educational use policy if you want to use them in your university courses! 22 Sept 2026 wizardzines.com
- poll: if you use Git, how do you set up Git to login to remote Git repos? (you can pick more than one) 21 Sept 2026
Link verified 3 Sept 2026. Recent items update automatically from the channel.
Bluesky @b0rk.jvns.ca Short posts about programming, zines and her work.
Recent
- are you interested in learning to use Git (as a total beginner?) I'd love your feedback on a Git tutorial! Sign up here: forms.gle/msQDVyJtEtre... the tutorial will be available for free on git-scm.com when it's done, and we need a few more testers to make that possible! 15 Oct 2026
- i'm working on some more updates to the official Git documentation so uh what is one concept you wish the docs explained more clearly? right now I'm working on merge conflicts which I'm pretty excited about 7 Oct 2026
- i'm looking for some Windows users to test a new tutorial about Git for beginners! If you sign up here I'll send you an email next week or so with a link: forms.gle/69NgKWuqtEHU... (non-Windows users welcome too but I have a lot of linux & mac users already :)) 5 Oct 2026
Show 17 more
- periodic reminder that Wizard Zines has an educational use policy if you want to use them in your university courses! 22 Sept 2026 wizardzines.com
- big news about the Wizard Zines store: print orders from Europe now ship from a European warehouse in Germany!!! get your zines here: wizardzines.com and here's the shipping FAQ with all the details: 1 Sept 2026 store.wizardzines.com
- been making a single-page app with pocketbase.io this week and it's been a nice experience. I like making single-page JS apps with a Go backend API and this means that I don't have to write the Go backend. Really impressive project given that it's built by one person in their spare time. 6 Aug 2026
- cool to see that the ICFP programming contest this year is focused on systems programming 22 Jul 2026 icfpcontest2026.com
- some more things about Django I've been enjoying 21 Jul 2026 jvns.ca
- wizard zines has its first translation! How Git Works (wizardzines.com/zines/git) is now available in Korean, translated by ByteFreaksStudio inf.run/XYiAR I do not know how to read Korean but it's very cool to see :) 21 Jul 2026
- learning a few things about running SQLite 17 Jul 2026 jvns.ca
- the next version of Python is going to have a built in sampling profiler!!!! this is so exciting to see 16 Jun 2026 docs.python.org
- exciting to read about this work on rv, uv has made Python so much easier for me 16 Jun 2026
- it's cool to read other people's takes on how to organize their CSS 26 May 2026
- this looks super cool, i like how in open-props-ui.netlify.app/html/compone... you can literally copy and paste all the html/css for that component (minus the base theme stuff) and it seems like a reasonable size 19 May 2026
- I've started using ** in Fish instead of find & xargs and I really love it, instead of writing `find . -name '*.py' | xargs wc -l` I can just write `wc -l **.py` it hasn't 100% replaced `find` for me but I'm definitely using xargs way less than I used to 19 May 2026
- moving away from tailwind, and learning to structure my CSS 15 May 2026 jvns.ca
- just saw this review of "The Secret Rules of the Terminal" and it's the best feeling when someone got exactly what I'd hoped they'd get from the zine 7 May 2026 wizardzines.com
- excited to announce that Wizard Zines is now shipping Canadian orders from Canada! now shipping is cheaper & there's no risk of being hit with duties get your zines at 6 May 2026 wizardzines.com
- links to css colour palettes jvns.ca/blog/2026/05... (from a discussion over on mastodon) 4 May 2026
- testing Vue components in the browser 2 May 2026 jvns.ca
Link verified 3 Sept 2026. Recent items update automatically from the channel.
GitHub @jvns Code for her blog, zines tooling and small side projects.
Recent
- docs-feedback 23 Sept 2026
- asdfasdfasdf 23 Sept 2026
- mess-with-dns — Source for Mess With DNS 17 Aug 2026
Show 8 more
- nginx-playground 22 Jun 2026
- asdfasdfsadfadf 11 Jun 2026
- git-commit-folders 9 Jun 2026
- fringe-2021-schedule 5 Jun 2026
- sidebar-attempt 11 Mar 2026
- festivals — https://festivals.jvns.ca 15 Feb 2026
- git-list-viewer 8 Jan 2026
- test-deleteme 9 Dec 2025
Link verified 3 Sept 2026. Recent items update automatically from the channel.
About the English under a post
Some people here publish in a language other than English. Where they do, this site shows a machine translation beneath the post, in this typeface — the site's own, not theirs.
The post itself is never changed, moved or hidden: what is set in the serif above is exactly what the person published, and it is what to quote them on. A translation can be wrong in ways that matter, especially about tone.
Only the post's own words are translated. A quoted post, a linked article and a belief on korrents.com are left in their original language.