Skip to Content
Navigation:

Comics!

Here are (almost) all of the comics I've published! They're ordered approximately by popularity, most popular first.

bash tricks
/proc
how I got better at debugging
grep
permissions
how to be a wizard programmer
more bash tricks
ssh
what to talk about in 1:1s
bash brackets cheat sheet
the box model
memory allocation
misc commands
SELECT queries start with FROM
the most important HTTP request headers
curl
bash errors
xargs
awk
CORS
CSS variables
containers aren't magic
virtual memory
system calls
content delivery networks
inline vs block
ask for specific feedback
ip
what's HTTP?
how URLs work
namespaces
CSS units
centering in CSS
less
netcat
HAVING
sed
write for one person
ngrep
du & df
floating point
cgroups
shared libraries
take on hard projects
anatomy of a http request
anatomy of a HTTP response
why containers?
dig
ps
my rules for simple JOINs
http status codes
sort & uniq
how indexes make your queries fast
ss
nmap
lsof
man page sections
CSS selectors
cookies
CSS testing checklist
copy on write
the OOM killer
CPU scheduling
HTTP/2
tar
unix domain sockets
iptables
tshark
EXPLAIN
cat
find
debugging is hard. take breaks.
segmentation faults
CSS isn't easy
page faults
network protocols
bash parameter expansion
COALESCE
single quote your strings
mmap
processes
libc
when debugging, your attitude matters
overlay filesystems
what's a shell?
debugging tips: check your assumptions
inodes
pipes
learn one thing at a time
ping
kill
terminals
a branch is a pointer to a commit
file buffering
hash functions
openssl
bash redirects
why updating DNS is slow
shellcheck
if you understand a bug, you can fix it
sockets
file descriptors
HTTP response headers
tcpdump
head & tail
mitmproxy
oh shit! I accidentally committed to the wrong branch!
the same-origin policy
async functions
socat
assembly
top
TLS certificates
capabilities
HTTP security headers
questions to ask about your data
threads
highlight the main ideas
ethtool
container kernel features
what's your manager's job?
debugging tip: code one thing at a time
CSS specificity
tc
containers = processes
writing code with bugs is normal
NULL surprises
on surviving performance reviews
binary search
understand the bug before trying to fix it
CSS grid areas
HTTP caching headers
set clear expectations
position: absolute
seccomp-bpf
shell script arguments
bash if statements
window functions
why the same-origin policy matters
debugging tip: change one thing at a time
NULL: unknown or missing
CSS isn't design
oh shit! I committed something to master that should have been on a brand new branch!
GROUP BY
investigate bugs together
what's a header?
amazing debugging features
understand your error messages
HTTP request methods 1
signals
PID namespaces
let your bugs teach you
using HTTP APIs
conntrack
SQL: ways to count
bash functions
trap
container networking
figure out what your manager is great at
container registries
the 4 types of DNS servers
subqueries
stacking contexts
padding syntax
WHERE
CNAME records
DNS record types
talk about problems early
how to read an error message
why we need DNS
flexbox basics
debugging tip: you've probably seen this bug before
debug by writing a test
subdomains
top-level domains
how to handle intermittent bugs
picking a domain registrar
authoritative nameservers
make your code easy to debug
work with your manager to get promoted
keep conversations mostly constructive
debugging tip: build your mental model
a SHA always refers to the same code
HTTP request methods 2
build the support system you need
receiving email at your domain
domain privacy
debugging tip: more assumptions to check
debugging tip: get specific about what the bug is
the CSS inspector
share your debugging stories
on reproducing your bugs
love your bugs
layers
know your spy tools
hiding elements with CSS
command line arguments
clock_gettime
browser default stylesheets
CSS borders
CSS backwards compatibility
writing tip: say something surprising
writing tip: ask good questions
why I love bash
ways to build expertise
user namespaces
understand your manager's goals
tips for reading code
subshells
scenes from kubernetes
scenes from design docs
remember your manager's only human
read the source code
pivot-root
opening a file
on emotional labour
oh shit! I want to undo something from 5 commits ago!
oh shit! I want to split my commit into 2 commits!
oh shit! I tried to run a diff but nothing happened!
oh shit! I tried to commit a file that should be ignored!
oh shit! I started rebasing and now I have 1000000 conflicts to fix!
oh shit! I need to change the message on my last commit!
oh shit! I have a merge conflict!
oh shit! I did something terribly wrong, does git have a magic time machine?
oh shit! I committed but I want to make one small change!
non-POSIX features
network namespaces
miscellaneous networking tools
media queries
let's build expertise!
learning on my own
learning at work
kubernetes components
it's not too late to start learning
invest in understanding
how to work well with your manager
how to make a namespace
git mistakes you can't fix
getting started with SELECT
getting a new manager
every commit has a parent
debugging tip: track what you changed
debugging tip: slow down
debugging tip: ask lots of questions
containers: the big idea: include EVERY dependency
container configuration options
bash variables
bash pipes
bash input
bash globs
bash for loops
bash debugging
asking good questions (part 2)
asking good questions
SQL example: get the time between baby feedings
SQL example: LEFT JOIN + GROUP BY
SELECT
POSIX compatibility
OVER() assigns every row a window
ORDER BY and LIMIT
INNER JOIN and LEFT JOIN
HTTPS
HTTP redirects
HTTP exercises
HEAD is the commit you have checked out
CSS transitions
CSS isn't arbitrary
CASE
BPF cheat sheet
environment variables
bash quotes
bash builtins
background processes
list what you've learned
why some bugs feel "impossible"
track your progress
make a minimal reproduction
ask lots of questions
guesses are often wrong
little-endian
hexadecimal
bytes
DNS queries
DNS queries aren't harmless
how to read dig output
life of a DNS query
everything in a DNS packet
glue records
how airports lie to you with DNS
DNS is distributed
SPF & DKIM records
a tiny DNS resolver
things that can break your DNS
the root nameservers
DNS cache levels
resolvers vs authoritative nameservers
negative caching
the DNS hierarchy

Saturday Morning Comics!

Want another comic like this in your email every Saturday? Sign up here!

I'll send you one of my favourite comics from my archives every Saturday.
© Julia Evans 2021 | All rights reserved (see the FAQ for notes about licensing)