Videos
2024
Mini-rust in Rust 008: Refactoring our parser -
Mini-rust in Rust 007: Evaluating an operation -
Mini-rust in Rust 006: Parsing an operation -
Mini-rust in Rust 005: Making our lexer an iterator -
Mini-rust in Rust 004: Refactoring our lexer -
Mini-rust in Rust 003: Much prettier errors -
Mini-rust in Rust 002: Errors while lexing -
Mini-rust in Rust 001: Lexing an int -
Rust 101 - 53: Exercises for module G (q4) -
Rust 101 - 52: Exercises for module G (q3) -
Rust 101 - 51: Exercises for module G (q2) -
Rust 101 - 50: Exercises for module G (q1) -
Rust 101 - 49: Foreign function interfaces (interacting with other languages) -
Rust 101 - 48: Exercises for module F (q3) -
Rust 101 - 47: Exercises for module F (q2) -
Rust 101 - 46: Exercises for module F (q1) -
Rust 101 - 45: Unsafe types and examples -
Rust 101 - 44: Undefined behaviour -
Rust 101 - 43: The two meanings of "unsafe" in Rust -
Rust 101 - 42: Why do we need unsafe? -
Rust 101 - 41: Exercises for module E (q2b) -
Rust 101 - 40: Exercises for module E (q2a) -
Rust 101 - 39: Exercises for module E (q1b) -
Rust 101 - 38: Exercises for module E (q1a) -
Rust 101 - 37: Async runtimes -
Rust 101 - 36: What async and await really do -
Rust 101 - 34: What is async? -
Rust 101 - 33: Exercises for module D (q3) -
Rust 101 - 32: Exercises for module D (q2) -
Rust 101 - 31: Exercises for module D (q1) -
Rust 101 - 30: Good patterns and not so good -
Rust 101 - 29: Trait objects and object safety -
Rust 101 - 28: Dynamic dispatch -
New home for my videos: video.infosec.exchange -
Rust 101 - 27: Exercises for module C (q2) -
Rust 101 - 26: Exercises for module C (q1) -
Rust 101 - 25: Threads, Mutexes, channels, Send and Sync -
Rust 101 - 24: Parallelism and Rayon -
Rust 101 - 23 Exercises for module B (q3) -
Rust 101 - 22 Exercises for module B (q2) -
Rust 101 - 21 Exercises for module B (q1) -
Rust 101 - 20: Unit, integration and benchmark tests -
Rust 101 - 19: Creating a nice API -
Rust 101 - 18: Dependencies and Cargo.toml -
Rust 101 - 17: Exercises for module A3 (part 2) -
Rust 101 - 16: Exercises for module A3 (part 1) -
Rust 101 - 15: Lifetime bounds -
Rust 101 - 14: Some standard library traits -
Rust 101 - 13: Type Parameters and Associated Types -
Rust 101 - 11: Exercises for module A2 -
Rust 101 - 9: Vecs, Boxes and slices -
Rust 101 - 8: Writing methods using impl blocks -
Rust 101 - 7: Error handling with panic and Result -
2023
Rust 101 - 6: Structs and Enums -
Rust 101 - 4: Exercises for module A1 -
Rust 101 - 3: Memory and ownership -
Rust 101 - 2: Language basics -
Maths: The Fun Parts - Graphs video -
Maths: The Fun Parts - Groups video -
Maths: The Fun Parts - Sets video -
2022
Matrix is a Distributed Real-time Database Video -
Improving my vimrc live on stream -
2021
Writing Snake in Terraform Video -
Republishing Bartosz Milewski's Category Theory lectures -
Streaming video with Owncast on a free Oracle Cloud computer -
2020
Code your first game: Snake in JavaScript (on Raspberry Pi) -
Coding a tiny game in JavaScript video -
Keeping track of podcast times with a simple bash script on Linux -
Converting HTML slides to a PDF with Firefox -
2019
KotlinJS: First impressions (formed by writing Snake) video -
Dependency Injection frameworks: reasons to avoid them video -
ACCU Talk "How Git really works" -
Python Async basics video (100 million HTTP requests) -
2018
Elm makes me happy (updated for Elm 0.19) video -
Godot: make new objects at runtime (instancing) video -
Godot: Dragging and dropping physics objects video -
Godot: 2D shapes bouncing off each other video -
Migrating videos from YouTube to PeerTube inside a Docker container -
2016
How to write a programming language - Part 3, The Evaluator -
How to write a programming language - Part 2, The Parser -
How to write a programming language - Part 1, The Lexer -
Basic Concepts of Christianity video -
Elm makes me happy (old: Elm 0.17) -
2015
Difficult merges in Git - don't panic! -
Rabbit Escape out now on Android! -
How to make your own levels for Rabbit Escape -
Rabbit Escape v0.1 out now for Linux, Windows and Mac video -
2014
Snowflake Christmas card web page on the Raspberry Pi -
Snowflake Christmas card in Scratch on the Raspberry Pi -
Android development - saving state -
Android development - Rabbit Escape really working on Android -
Android programming - a non-Android, Android Game -
Android programming - drawing bitmaps in a game loop -
Android programming - a menu using Activities and Intents -
Android programming - setting up Android Studio -
OpenID security in a REST API -
Token-based security in a REST API -
2013
Why use git for source control? -
Everybody loves build.xml (test-driven Ant) -
Everybody hates build.xml (code reuse in Ant) -
My First Raspberry Pi Game " Part 12 " Scoring, done! -
My First Raspberry Pi Game " Part 11 " Being less rude -
2012
My First Raspberry Pi Game " Part 10 " Red square -
My First Raspberry Pi Game " Part 09 " Lots more words -
My First Raspberry Pi Game " Part 08 " Success and failure -
My First Raspberry Pi Game " Part 07 " A green circle -
My First Raspberry Pi Game " Part 06 " A better class of waiting -
My First Raspberry Pi Game " Part 05 " Say something -
My First Raspberry Pi Game " Part 04 " A small black screen -
My First Raspberry Pi Game " Part 03 " It's like a magic spell -
My First Raspberry Pi Game " Part 02 " Saying hello -
My First Raspberry Pi Game - Part 01 - Before we start -
Tail Call Optimisation in C++ - lightning talk video -
Scheme 2: Basics - pairs and lists video -