Every project in this collection is written on the same machine, in the same terminal, against the same set of tools. This site documents that layer. Not what to build, but what you build it with.
Pages are written the way you would actually want to read them at the moment something breaks: the mental model first, then the commands, then the gotcha that cost an evening. Several are explicitly comparisons, because the useful question is usually which of two tools rather than how one works.
For the physical machines see Hardware Tools, and for containers and services see IaaS.
Linux
| Shell Commands |
The broad tour: what a shell is, file and text manipulation, redirection and pipes, permissions, process and system management, networking, packages, environment variables, and archiving |
| Users, Groups and Permissions |
The longest page here. User types and management, the files behind them, UIDs and GIDs, groups, the permission bits, switching users, and session management |
| Bash Scripts |
Variables, conditionals, loops, functions, arguments, and error handling, with worked examples |
| systemd Services |
Unit files, creating and enabling a service, resource management through cgroups, and the practices that keep units maintainable |
| journalctl |
Reading the logs that systemd produces |
| Display Systems |
X11 against Wayland, then the desktop environments on top: GNOME, KDE Plasma, XFCE |
| New Linux Computer |
The setup checklist for a fresh Ubuntu box: git, VS Code, stow, tmux, SSH keys, curl, and battery charge limits |
| WSL |
Running Linux under Windows: enabling the feature, the config files, and port forwarding back to Windows |
Terminal and Editors
| Tmux |
Sessions, windows, and panes, which is the whole model |
| Vim |
Modes, the basic commands, the advanced features, and customisation |
| Neovim |
What it adds over Vim, and its plugin ecosystem |
Build and Task Runners
Two pages that answer one question between them.
| Make |
GNU make properly: the core mental model, special variables, phony targets as the number one gotcha, the fact that each recipe line runs in a new shell, the four assignment operators, includes, pattern rules, and the functions you reach for constantly |
| Just |
A command runner that looks like make but is not a build system, because it does not do timestamp-based rebuilds. Recipes, dependencies, arguments, dotenv behaviour, portability, and a direct comparison against make |
Virtualization
| Proxmox |
The platform end to end: what it is, requirements, getting started, storage and partitioning, users, GPU passthrough, cloud-init, device discovery, and maintenance |
| Proxmox Storage |
All ten backends compared, directory through LVM, LVM-thin, ZFS, Ceph, NFS, CIFS, iSCSI, and GlusterFS, with what each is actually for. Worth reading before creating a guest, because the choice is hard to undo |
Development Environment
| JupyterLab |
Server configuration: logging, security, SSL, performance, working directory, terminals, extensions, and kernel management |
| VS Code Debugging |
debugpy and the launch.json that drives it |
| Quarto |
Installing the renderer behind every site in this collection |
| LaTeX |
Installation |
| PlatformIO |
The embedded toolchain: project anatomy, the platformio.ini recipe, everyday CLI, library resolution gotchas, build flags, multi-board environments, debugging, Unity testing, and selective builds |
Programming Concepts
| Design Patterns |
The three families: creational, structural, and behavioural |
| Algorithms |
The algorithms worth knowing, ordered by learning priority |
| C++ |
Syntax through to modern C++: types, control flow, functions, OOP, memory management, templates, the STL, and the C++11 to C++23 additions |
| Abstract Syntax Trees |
What an AST is and why “abstract”, how one is produced, traversal patterns, where they show up in real tooling, and how they differ from related representations |
| Regex |
Syntax, groups and alternation, lookarounds, Python’s re, practical cases, and performance |
Diagrams
A six-part folder on drawing software, organised by what the diagram is for rather than by notation. Most pages carry copy-paste Mermaid.
| Overview |
The map of diagram types |
| Structural |
Class, ER, component, deployment, and package diagrams, and what each is actually good for |
| Behavioural |
Sequence, state machine, and activity diagrams, plus why to skip the communication diagram |
| Requirements and Scope |
Use cases, user flows, journey maps, and requirement traceability: what the system is for and where it stops |
| Architectural |
The non-UML notations that most architecture questions actually want: the four C4 levels, data flow diagrams with a threat model on top, and network topology |
| Process and Ops |
Gantt and dependency charts, swimlanes, and timing diagrams |
Security, Capture, and Agents
| MFA |
Multi-factor authentication end to end: the three factors, methods ranked by security, the attacks against each, how MFA differs from 2FA and passwordless, cloud platform support, and compliance |
| Sound Testing |
Recording from a microphone inside a notebook, visualising the waveform, playing it back, and basic quality metrics |
| Sound Testing 2 |
A second pass over the same ground with additional quality checks |
| Camera Testing |
Capturing from a camera |
| Browser Use |
The library that gives an LLM control of Chromium by serialising the page into indexed interactive elements and looping. Architecture, API surface, model choice, the commercial layer, where it earns its keep, and the gotchas |
Not Covered Yet
- Git has no page, despite being the tool used most. Version control is covered from the GitHub side in Web Development.
- No editor configuration page. Vim and Neovim are covered as tools, but the actual dotfiles and plugin setup are not written down anywhere.
- Nothing on ssh and remote work as a subject, only the key setup buried in the new-computer checklist.
- Graphify is a stub, three cells with no content.
- The two sound testing pages duplicate each other and should be merged.
Linux/04_Bash_Scritps.ipynb is misspelled in the filename, which is why the URL looks wrong.
Back to top