RSS.Social

Wizard Zines - Comics on wizard zines

follow: @[email protected]

Posts

diverged remote branches

the diff algorithm

the staging area

reset

the reflog

meet the remote

lost commits

inside the commit

less

terminal redirects

meet the shell

job control

redirects

meet the terminal emulator

colours in the terminal

the mouse

TERM

editing text in a REPL

keyboard shortcuts

meet the TTY driver

stty

canonical mode

copy and paste in the terminal

every core unix program I use

filename tips (in the shell)

line editing

meet the program

more filename tips (in the shell)

PATH and finding programs

PATH tips

quitting in the terminal

shell history

stdin, stdout, stderr

terminal escape codes

the terminal: cast of characters

types of terminal programs

what's HTTP?

oh shit! I committed something to main that should have been on a brand new branch!

folder gotchas

git add -p

git worktree

interactive rebase

merge conflict tips

submodules

learning on my own

knowing where you are in git

git references

scenes from distributed systems

the floating point number line

git cheat sheet

your domain's authoritative nameservers

strace command line flags I love

some people who make programming easier

PATH

32 bits is small

8 bytes, many meanings

ASCII

bases

big integers

bit flags

bitwise operations

bytes

fixed point

floating point alternatives

floating point is weird

floating point math

floating point representation

floating point: the bits

hexadecimal

how bitwise operations are used

how floats are printed

integer overflow

integers

little vs big endian

meet the byte

NaN and infinity

science <3 floating point

signed vs unsigned integers

the gaps between floats

a debugging manifesto

add a comment

add lots of print statements

add pretty printing

amazing debugging features

analyze the logs

ask lots of questions

brainstorm some suspects

colours, graphs, and sounds

comment out code

debug by writing a test

debugging is hard. take breaks.

debugging tip: ask lots of questions

debugging tip: build your mental model

debugging tip: change one thing at a time

debugging tip: code one thing at a time

debugging tip: get specific about what the bug is

debugging tip: more assumptions to check

debugging tip: slow down

debugging tip: track what you changed

debugging tip: you've probably seen this bug before

debugging tips: check your assumptions

delete the buggy code

do a victory lap

do the annoying thing

document your quest

draw a diagram

explain the bug out loud

find a new source of info

find a version that works

find related bugs

find the type of bug

guesses are often wrong

how to handle intermittent bugs

how to read an error message

identify one small question

if you understand a bug, you can fix it

inspect unreproducible bugs

investigate the bug together

jump into a REPL

keep a log book

know your spy tools

learn one small thing

learn one thing at a time

let your bugs teach you

list what you've learned

look at recent changes

make a minimal reproduction

make sure your code is running

make your code easy to debug

one thing at a time

preserve the crime scene

read the docs

read the error message

read the library's code

reduce randomness

reproduce the bug

reread the error message

retrace the code's steps

rule things out

share your debugging stories

shorten your feedback loop

sprinkle assertions everywhere

take a break

tell a friend what you learned

tidy up your code

timebox your investigation

track your progress

try out a new tool

types of debugging tools

understand the bug before trying to fix it

understand your error messages

use a debugger

when debugging, your attitude matters

why some bugs feel "impossible"

write a failing test

write a message asking for help

write a tiny program

writing code with bugs is normal

A & AAAA records

a tiny DNS resolver

authoritative nameservers

CNAME records

dig command line arguments

DNS records

DNS: cast of characters

everything in a DNS packet

getaddrinfo

let's meet dig

life of a DNS query

MX records

negative caching

NS records

resolvers can lie

resolvers vs authoritative nameservers

search domains

subdomains

TCP DNS

the DNS hierarchy

the root nameservers

TXT records & more

why DNS updates are slow: caching

DNS cache levels

things that can break your DNS

SPF & DKIM records

DNS is distributed

how airports lie to you with DNS

glue records

how to read dig output

DNS queries aren't harmless

DNS queries

DNS record types

receiving email at your domain

why we need DNS

the 4 types of DNS servers

top-level domains

picking a domain registrar

domain privacy

why updating DNS is slow

background processes

bash brackets cheat sheet

bash builtins

bash debugging

bash errors

bash for loops

bash functions

bash globs

bash if statements

bash input

bash parameter expansion

bash pipes

bash quotes

bash redirects

bash variables

environment variables

non-POSIX features

POSIX compatibility

shell script arguments

shellcheck

subshells

trap

why I love bash

browser default stylesheets

centering in CSS

CSS backwards compatibility

CSS borders

CSS grid areas

CSS isn't arbitrary

CSS isn't design

CSS isn't easy

CSS selectors

css specifications

CSS specificity

CSS testing checklist

CSS transitions

CSS units

CSS variables

flexbox basics

hiding elements with CSS

inline vs block

media queries

padding syntax

position: absolute

stacking contexts

the box model

the CSS inspector

async functions

highlight the main ideas

write for one person

hash functions

binary search

capabilities

cgroups

container configuration options

container IP addresses

container kernel features

container networking

container registries

containers = processes

containers aren't magic

containers: the big idea: include EVERY dependency

how to make a namespace

layers

layers (containers)

namespaces

network namespaces

overlay filesystems

PID namespaces

pivot-root

seccomp-bpf

user namespaces

why containers?

take on hard projects

CASE

COALESCE

EXPLAIN

EXPLAIN your slow queries

getting started with SELECT

GROUP BY

HAVING

how indexes make your queries fast

INNER JOIN and LEFT JOIN

my rules for simple JOINs

NULL surprises

NULL: unknown or missing

ORDER BY and LIMIT

OVER() assigns every row a window

questions to ask about your data

SELECT

SELECT queries start with FROM

single quote your strings

SQL example: get the time between baby feedings

SQL example: LEFT JOIN + GROUP BY

SQL: ways to count

subqueries

ways to count rows

WHERE

window functions

network protocols

clock_gettime

what's a shell?

libc

terminals

assembly

CPU scheduling

IMSI catchers (fake cellphone towers)

terminal escape codes let you change colour

file locking

command line arguments

inodes

kubernetes components

scenes from kubernetes

writing tip: ask good questions

writing tip: say something surprising

opening a file

anatomy of a http request

anatomy of a HTTP response

content delivery networks

cookies

CORS

how URLs work

HTTP caching headers

HTTP exercises

HTTP redirects

HTTP request methods 1

HTTP request methods 2

HTTP response headers

HTTP security headers

http status codes

HTTP/2

HTTPS

the most important HTTP request headers

the same-origin policy

TLS certificates

using HTTP APIs

what's a header?

why the same origin policy matters

why the same-origin policy matters

how I got better at debugging

the OOM killer

segmentation faults

how kubernetes can break - etcd

BPF cheat sheet

conntrack

curl

dig

ethtool

every Linux networking tool I know

ip

iptables

miscellaneous networking tools

mitmproxy

netcat

ngrep

nmap

openssl

ping

socat

ss

ssh

tc

TCP: how to reliably get a cat

tcpdump

tshark

a branch is a pointer to a commit

a SHA always refers to the same code

branches have no rules

combining branches

combining diverged branches

detached HEAD state

diverged branches

every commit has a parent

every git command I use

every git jargon

fixing diverged remotes

git branches: the rules

git discussion bingo

git mistakes you can't fix

HEAD and heads

HEAD is the commit you have checked out

inside .git

let's explore a commit

losing your work

meet the branch

meet the commit

meet the merge

merge commits

oh shit! I accidentally committed to the wrong branch!

oh shit! I committed a file that should be ignored!

oh shit! I committed but I want to make one small change!

oh shit! I did something terribly wrong, does git have a magic time machine?

oh shit! I have a merge conflict!

oh shit! I need to change the message on my last commit!

oh shit! I started rebasing and now I have 1000000 conflicts to fix!

oh shit! I tried to run a diff but nothing happened!

oh shit! I want to split my commit into 2 commits!

oh shit! I want to undo something from 5 commits ago!

orphan commits

remote branch caching

rules for rebasing

the current branch: HEAD

what's a branch?

ask for specific feedback

build the support system you need

figure out what your manager is great at

getting a new manager

how to work well with your manager

keep conversations mostly constructive

on emotional labour

on surviving performance reviews

remember your manager's only human

set clear expectations

talk about problems early

understand your manager's goals

what to talk about in 1:1s

what's your manager's job?

work with your manager to get promoted

awk

bash tricks

cat

du & df

find

grep

head & tail

kill

less

lsof

misc commands

more bash tricks

ps

sed

sort & uniq

tar

top

xargs

/proc

copy on write

file buffering

file descriptors

floating point

man page sections

memory allocation

mmap

page faults

permissions

pipes

processes

shared libraries

signals

sockets

system calls

threads

unix domain sockets

virtual memory

building confidence in kubernetes

asking good questions

asking good questions (part 2)

invest in understanding

it's not too late to start learning

learning at work

let's build expertise!

love your bugs

scenes from design docs

tips for reading code

ways to build expertise

learning to design software

what's slow on a computer

vim sessions

getting started with ftrace

read the source code

linux tracing systems

directories and symlinks

how does dns work

blogging principles

computers are fast

the filesystem cache

acid

the cap theorem

bash tips

bpf filters

rr

man pages are awesome

mutexes

network address translation

networking concepts

anatomy of a packet

how to talk to your operating system

no feigning surprise

the stack

what does an operating system do?

having productive conversations when i disagree

page table

tcp

ways i want my team to be

the senior engineer

user space vs kernel space

2fa

inter-process communication

what's a mac address?

ipv6

directories and symlinks

how to give good feedback

how to be a wizard programmer