Archive

All articles

Every tutorial we've published, newest first. Filter by topic or level to find exactly what you need.

Writing Bash Scripts That Don't Break

Most shell scripts work fine until a file name has a space in it or a command fails halfway through. Learn strict mode, quoting, safe temporary files and cleanup traps, then put it all together in a real backup script.

LinuxIntermediate6 min read
A terminal running a Bash script that starts with set -euo pipefail

SQL Indexes and Query Plans: Making Slow Queries Fast

Learn how B-tree indexes really work, read query plans with EXPLAIN, choose the right column order for composite indexes, and spot the mistakes that silently disable an index.

SQLAdvanced8 min read
A B-tree index narrowing a search from a million rows down to a single leaf page

Linux Processes Under the Hood: fork, exec, Signals and Zombies

What really happens when you run a command: fork and exec, exit codes and wait, how signals stop programs (and how to shut down gracefully), why zombies appear, and why PID 1 in a container ignores your Ctrl+C.

LinuxAdvanced8 min read
A process tree: a shell forks a child, the child execs a new program, exits, and is reaped by its parent

How Git Really Works: Blobs, Trees, Commits and Refs

Open the .git folder and see Git for what it is: a content-addressed object store with movable pointers on top. Build a commit by hand and finally understand rebase, reset and the reflog.

GitAdvanced7 min read
A commit pointing to a tree, which points to blobs and a subtree, with the main branch and HEAD pointing at the commit

Dijkstra's Algorithm: Shortest Paths with a Priority Queue

Implement Dijkstra's shortest-path algorithm in Python with heapq, trace it step by step, understand why it's correct, and learn exactly when it breaks: negative edges, ties in the heap and dense graphs.

AlgorithmsAdvanced7 min read
A weighted graph of six nodes with the shortest-path tree from A highlighted and each node labelled with its distance

CSS Stacking Contexts: Why z-index: 9999 Doesn't Work

z-index isn't a global ranking. It only compares elements inside the same stacking context, and a dozen properties quietly create new ones. Learn the painting order, find the context that traps your element, and fix overlap bugs for good.

CSSAdvanced7 min read
Layers of a web page shown in 3D: a modal with z-index 9999 trapped inside a layer that sits below the site header

Binary Search Without Off-by-One Bugs

Binary search is easy to explain and surprisingly easy to get wrong. Learn one loop invariant that makes it correct every time, find first and last positions, and use binary search on answers instead of arrays.

AlgorithmsIntermediate7 min read
A sorted row of numbers with the search range shrinking by half at each step until it lands on the first 23

Understanding async/await in JavaScript

A practical guide to promises and async/await: how they work, how to handle errors, and how to run tasks in parallel without slowing your app down.

JavaScriptIntermediate4 min read
Timeline comparing three requests run one after another with the same requests run in parallel

Big-O Notation Explained with Real Code

Understand time complexity without the maths anxiety. We'll analyse real Python functions and see why O(n²) code falls apart at scale.

AlgorithmsBeginner4 min read
Chart of growth curves for O(1), O(log n), O(n), O(n log n) and O(n squared)

CSS Flexbox vs Grid: When to Use Which

Flexbox and Grid both lay out elements, but they think differently. Learn the one-dimension vs two-dimension rule and build real layouts with each.

CSSBeginner4 min read
Flexbox boxes in a single row next to a grid of boxes spanning rows and columns

Python Decorators Explained Step by Step

Decorators look like magic, but they're just functions that wrap functions. Build your own timing and retry decorators from scratch.

PythonIntermediate4 min read
A function wrapped inside two decorator layers, @retry and @timed