### every browser has a default stylesheet (aka "user agent stylesheet")
a small sample from the Firefox default stylesheet:
```
h1 {
font-size: 2em;
font-weight: bold;
}
```
### different browsers have different defaults
Illustration of a smiling stick figure with curly hair.
person: buttons & forms have some of the biggest differences
### you can read the default stylesheet
Firefox's default stylesheets are at:
`resource://gre-resources/`
### every property also has a default "initial value"
the initial value (defined in the spec) is what's used if no stylesheet has set anything. For example, `background-color`'s initial value is `transparent`
### a CSS property can be set in 5 ways
(listed from lowest priority to highest priority)
1. the initial value
2. the browser's default stylesheet
3. the website's stylesheets and user stylesheets
4. inline styles set with HTML/JS
browser default stylesheets
permalink: https://wizardzines.com/comics/default-stylesheets/
from our zine Hell Yes! CSS!: https://wizardzines.com/zines/css/
13.03.2026 18:27
π 1
π 1
π¬ 0
π 0
### network namespaces are kinda confusing
Illustration of an unhappy-looking stick figure with curly hair.
person: what does it MEAN for a process to have its own network??
### namespaces usually have 2 interfaces
(+ sometimes more)
- the loopback interface (127.0.0.1/8, for connections inside the namespace)
- another interface (for connections from outside)
### every server listens on a port and network interface(s)
`0.0.0.0:8080` means "port 8080 on every network interface in my namespace"
### 127.0.0.1 stays inside your namespace
Illustration of a server, represented by a box with a smiley face, and a smiling stick figure with curly hair.
server, thinking: I'm listening on 127.0.0.1
person: that's fine but nobody outside your network server namespace will be able
to make requests to you!
### your physical network card is in the host network namespace
Illustration of a rectangular box drawn with a dotted line. Inside it are:
- the label "host network namespace"
- 192.168
network namespaces
permalink: https://wizardzines.com/comics/network-namespaces/
from our zine How Containers Work!: https://wizardzines.com/zines/containers/
11.03.2026 18:33
π 4
π 1
π¬ 0
π 0
### inside a container, things look different2`
Illustration of a smiling stick figure with curly hair.
Person: I only see 4 processes in `ps aux`, that's weird...
### why things look different: namespaces
Illustration of a container, represented by a box with a smiley face
Container: I'm in a different PID namespace so `ps aux` shows different processes!
### every process has 7 namespaces
```
$ lsns -p 273
NS TYPE
4026531835 cgroup
4026531836 pid
4026531837 user
4026531838 uts
4026531839 ipc
4026531840 mnt
4026532009 net
```
-p is the PID
4026532009 is the namespace ID
you can also see a process's namespace with:
`$ ls -1 /proc/273/ns`
### there's a default ("host" namespace)
Person: "outside a container" just means "using the default namespace"
### processes can have any combination
Container: I'm using the host network namespace but my own mount container namespace!
namespaces
permalink: https://wizardzines.com/comics/namespaces/
from our zine How Containers Work!: https://wizardzines.com/zines/containers/
09.03.2026 18:31
π 7
π 2
π¬ 0
π 0
### different images have similar files
Rails container image and Django container image, each represented by a box with a smiley face: we both use Ubuntu 18.0!
### reusing layers saves disk space
Rails image
- Rails app
- ubuntu:18.04
Django image
- Django app
- ubuntu:18.04
Both have the exact same files on disk for ubuntu:18.04.
### a layer is a directory
```
$ ls 8891378eb*
bin/ home/ mnt/ run/ tmp/
boot/ lib/ opt sbin/ usr/
dev/ lib64/ proc/ srv/ var/
etc/ media/ root/ sys/
```
`etc` are files in an ubuntu:18.04 layer
### every layer has an ID
usually the ID is a sha256 hash of the layer's contents
example: `8e99fae2..`
### if a file is in 2 layers, you'll see the version from the top layer
Two rectangular boxes on top of one another, each labelled `/code/file.py`. The one on top is the version you'll see in the merged image.
### by default, writes go to a temporary layer
Illustration of a rectangle labelled "temp layer", with a bunch of other smaller rectangles stacked
layers (containers)
permalink: https://wizardzines.com/comics/container layers/
from our zine How Containers Work!: https://wizardzines.com/zines/containers/
07.03.2026 18:26
π 10
π 3
π¬ 0
π 0
### it's SO easy to get started
Here's how:
1. Make a file called `hello.sh` and put some commands in it, like
`ls /tmp`
2. Run it with `bash hello.sh`
### pipes & redirects are super easy
managing pipes in other languages is annoying. in bash, it's just:
`cmd1 | cmd2`
### batch file operations are easy
smiling stick figure with curly hair: let's convert every .png to a .jpg
bash, with hearts in its eyes: I was born for this
### it's surprisingly good at concurrency
smiling stick figure with curly hair: let's start 12 programs in parallel & wait for them all to finish
bash: yep no problem!
### it doesn't change
bash is weird and old, but the basics of how it works haven't changed in 30 years. If you learn it now, it'll be the same in 10 years.
### bash is GREAT for some tasks
But it's also EXTREMELY BAD at a lot of things.
I don't use bash if I need:
* unit tests
* math (bash barely has numbers!)
* easy-to-read code Γ’ΒΒΊ
why I love bash
permalink: https://wizardzines.com/comics/why-i-love-bash/
from our zine Bite Size Bash!: https://wizardzines.com/zines/bite-size-bash/
05.03.2026 18:51
π 4
π 0
π¬ 0
π 0
### when your script exits, sometimes you need to clean up
nonplussed stick figure with short curly hair: oops, the script I created a bunch of temp files I want to delete
### `trap` sets up callbacks
`trap COMMAND EVENT`
COMMAND: what command to run
EVENT: when to run the command
### bash runs COMMAND when EVENT happens
`trap "echo 'hi!!!'" INT`
OS, represented by a box with a smiley face: <sends `SIGINT` signal>
bash, also represented by a box with a smiley face: ok, time to print out `hi!!!!`
### events you can trap
- unix signals (`INT`, `TERM`, etc)
- the script exiting (`EXIT`)
- every line of code (`DEBUG`)
- function returns (`RETURN`)
### example: kill all background processes when Ctrl+C is pressed
`trap "kill $(jobs -p)" INT`
when you press `CTRL+C`, the OS sends the script a `SIGINT` signal
### example: cleanup files when the script exits
```
function cleanup() {
rm -rf $TEMPDIR
rm $TEMPFILE
}
trap cleanup EXIT
```
EXIT is a fake "signal" that triggers
trap
permalink: https://wizardzines.com/comics/trap/
from our zine Bite Size Bash!: https://wizardzines.com/zines/bite-size-bash/
03.03.2026 19:33
π 8
π 2
π¬ 0
π 0
A comic about computing. A transcript may be available at the link in the post.
less
permalink: buff.ly/3Su8lxm
from our zine "Bite Size Command Line": buff.ly/3SsQruZ
16.02.2026 14:43
π 4
π 1
π¬ 1
π 0
A comic about computing. A transcript may be available at the link in the post.
content delivery networks
permalink: buff.ly/3OaCwHt
from our zine "HTTP: Learn your browser's language!": buff.ly/3tC3QXU
13.02.2026 14:43
π 5
π 1
π¬ 0
π 0
A comic about computing. A transcript may be available at the link in the post.
HTTP/2
permalink: buff.ly/3SrISVs
from our zine "HTTP: Learn your browser's language!": buff.ly/3tC3QXU
11.02.2026 20:24
π 2
π 0
π¬ 0
π 0
### `position: absolute;` doesn't mean absolutely positioned on the page...
```
#star {
position: absolute;
top: 1em;
left: 1em;
}
```
doesn't always place element at the top left of the page!
### ... it's relative to the "containing block"
the "containing block" is the closest ancestor with a `position` that isn't `static`, or the body if there isn't one. (`position: static` is the default)
Illustration of a larger box, labelled "body", with a smaller box, labelled "`#star` nested inside it. The smaller box is off-centre within the larger box. The smaller box is labelled "this element has `position: relative` set"
### `top, bottom, left, right` will place an absolutely positioned element
```
top: 50%;
bottom: 2em;
right: 30px;
left: -2in;
```
"`left: -2in;`" is labelled "negative works too"
Illustration of two overlapping boxes. The top of the smaller one is halfway down the height of the larger one. The gap between the tops of the two boxes is labelled "50%". The smaller one
position: absolute
Permalink: https://wizardzines.com/comics/position-absolute
10.02.2026 20:55
π 1
π 0
π¬ 0
π 0
A comic about computing. A transcript may be available at the link in the post.
HTTP response headers
permalink: buff.ly/3OaV8He
from our zine "HTTP: Learn your browser's language!": buff.ly/3tC3QXU
09.02.2026 14:43
π 3
π 1
π¬ 0
π 0
A comic about computing. A transcript may be available at the link in the post.
why the same-origin policy matters
permalink: buff.ly/3Hvbern
from our zine "HTTP: Learn your browser's language!": buff.ly/3tC3QXU
06.02.2026 14:43
π 4
π 0
π¬ 0
π 0
A comic about computing. A transcript may be available at the link in the post.
HTTPS
permalink: buff.ly/3u54wW4
from our zine "HTTP: Learn your browser's language!": buff.ly/3tC3QXU
04.02.2026 20:24
π 7
π 0
π¬ 0
π 0
A comic about computing. A transcript may be available at the link in the post.
using HTTP APIs
permalink: buff.ly/3vKpCcX
from our zine "HTTP: Learn your browser's language!": buff.ly/3tC3QXU
02.02.2026 14:43
π 4
π 0
π¬ 0
π 0
A comic about computing. A transcript may be available at the link in the post.
anatomy of a http request
permalink: wizardzines.com/comics/anato...
from our zine "HTTP: Learn your browser's language!": buff.ly/3tC3QXU
30.01.2026 14:43
π 8
π 1
π¬ 0
π 0
A comic about computing. A transcript may be available at the link in the post.
CORS
permalink: wizardzines.com/comics/cors/
from our zine "HTTP: Learn your browser's language!": buff.ly/3tC3QXU
28.01.2026 20:24
π 6
π 1
π¬ 0
π 1
A comic about computing. A transcript may be available at the link in the post.
a branch is a pointer to a commit
permalink: wizardzines.com/comics/branc...
from our zine "Oh shit, git!": wizardzines.com/zines/oh-shi...
26.01.2026 14:43
π 3
π 0
π¬ 0
π 0
A comic about computing. A transcript may be available at the link in the post.
oh shit! I want to undo something from 5 commits ago!
permalink: wizardzines.com/comics/oh-sh...
from our zine "Oh shit, git!": wizardzines.com/zines/oh-shi...
23.01.2026 14:43
π 4
π 1
π¬ 0
π 0
A comic about computing. A transcript may be available at the link in the post.
oh shit! I tried to commit a file that should be ignored!
permalink: wizardzines.com/comics/oh-sh...
from our zine "Oh shit, git!": wizardzines.com/zines/oh-shi...
21.01.2026 20:24
π 11
π 1
π¬ 0
π 1
A comic about computing. A transcript may be available at the link in the post.
oh shit! I did something terribly wrong, does git have a magic time machine?
permalink: buff.ly/3U23IMr
from our zine "Oh shit, git!": wizardzines.com/zines/oh-shi...
19.01.2026 14:43
π 5
π 1
π¬ 0
π 0
A comic about computing. A transcript may be available at the link in the post.
oh shit! I committed something to master that should have been on a brand new branch!
permalink: buff.ly/3RQ7PbI
from our zine "Oh shit, git!": wizardzines.com/zines/oh-shi...
16.01.2026 14:43
π 4
π 1
π¬ 1
π 0
A comic about computing. A transcript may be available at the link in the post.
oh shit! I started rebasing and now I have 1000000 conflicts to fix!
permalink: buff.ly/3H3Hphq
from our zine "Oh shit, git!": wizardzines.com/zines/oh-shi...
14.01.2026 20:24
π 4
π 0
π¬ 0
π 0
A comic about computing. A transcript may be available at the link in the post.
oh shit! I tried to run a diff but nothing happened!
permalink: buff.ly/3H2hG97
from our zine "Oh shit, git!": wizardzines.com/zines/oh-shi...
12.01.2026 14:43
π 2
π 0
π¬ 0
π 1
A comic about computing. A transcript may be available at the link in the post.
git mistakes you can't fix
permalink: buff.ly/3H3BOb6
from our zine "Oh shit, git!": wizardzines.com/zines/oh-shi...
09.01.2026 14:43
π 7
π 0
π¬ 0
π 0
A comic about computing. A transcript may be available at the link in the post.
CPU scheduling
permalink: buff.ly/3TtDXnH
07.01.2026 20:24
π 6
π 1
π¬ 0
π 0
A comic about computing. A transcript may be available at the link in the post.
segmentation faults
permalink: buff.ly/3va1xM1
05.01.2026 14:43
π 5
π 0
π¬ 0
π 0
A comic about computing. A transcript may be available at the link in the post.
command line arguments
permalink: buff.ly/3GKb6UL
02.01.2026 14:43
π 3
π 0
π¬ 0
π 0
A comic about computing. A transcript may be available at the link in the post.
clock_gettime
permalink: wizardzines.com/comics/clock...
31.12.2025 20:24
π 5
π 0
π¬ 0
π 0
A comic about computing. A transcript may be available at the link in the post.
what's a shell?
permalink: wizardzines.com/comics/shell/
29.12.2025 14:43
π 4
π 1
π¬ 0
π 0
A comic about programming. A transcript may be available at the link in the post.
the OOM killer
permalink: wizardzines.com/comics/oom-k...
26.12.2025 14:43
π 6
π 0
π¬ 0
π 0