Programming Languages

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 - 35: Futures -

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 -

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 -

2023

Rust 101 - 6: Structs and Enums -

Rust 101 - 3: Memory and ownership -

Rust 101 - 2: Language basics -

Rust 101 - 1: Course intro -

Maths: The Fun Parts - Sets video -

2021

Writing Snake in Terraform Video -

Republishing Bartosz Milewski's Category Theory lectures -

2020

Shutdown order consistency: how Rust helps -

Edge computing providers -

Struggling with Rust to figure out the right types for a function signature -

2019

ACCU Talk "How Kotlin makes your Java code better" -

Examples of Kotlin making your Java code better video -

London Python Meetup January 2019 - Async Python and GeoPandas -

2018

Elm makes me happy (updated for Elm 0.19) video -

Godot: Dragging and dropping physics objects video -

Godot: 2D shapes bouncing off each other video -

Graft Animation Language on Raspberry Pi -

Worksheet: "Tell a story by making animations with code" -

My experience upgrading to Elm 0.19 -

How to write a programming language articles -

Clever Things People Do In Groovy So You Have To Know About Them video -

Ideas on how lexing will work in Pepper3 -

Questions and answers about Pepper3 -

Examples of Pepper3 code -

2017

TECH(K)NOW Day workshop on "Writing a programming language" -

Adding a concurrency limit to Python's asyncio.as_completed -

Basic ideas of Python 3 asyncio concurrency -

How to write a programming language ACCU talk -

Iterating over the lines of a file in Java -

2016

Writing a unit test in Elm -

How to write a programming language - Part 3, The Evaluator -

Basic Haskell project setup (unit tests, code, formatting) -

How to write a programming language - Part 2, The Parser -

How to write a programming language - Part 1, The Lexer -

Simple example of Netty 4 usage -

Elm resizeable SVG canvas filling the screen -

Ambiguous names in Java due to non-normalised unicode - but all OK in Python -

Snake in Python 3 + Qt 5 -

Elm makes me happy (old: Elm 0.17) -

Snake in Elm -

2015

ZX Spectrum BASIC Web Server -

Snake in Dart -

Snake in ZX Spectrum BASIC -

Snake in Ruby -

Snake in Groovy -

2014

What is a string? -

Absolute Truth in programming languages -

Five Quines video -

Using the final keyword in interface method parameters does nothing -

2013

Bash arrays -

Goodness in programming languages, part 4 - Ownership & Memory -

C++14 "Terse" Templates - an argument against the proposed syntax -

2012

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 -

Bash associative array examples -

Lambda functions timeline -

Goodness in programming languages, part 3 " not doing the same thing more than once -

Tail Call Optimisation in C++ - lightning talk video -

Scheme 7: Macros video -

Scheme 6: Lambda video -

Tail Call Optimisation in C++ published in Overload journal -

Scheme 5: Quotation video -

Scheme 4: Recursion - how to write functions in Scheme video -

Scheme 3: Closures video -

Scheme 2: Basics - pairs and lists video -

Scheme 1: Feel the cool video -

Generalising tail call optimised C++ -

JavaScript WTFs Videos -

Closures in Scheme -

Performance of tail call optimised C++ -

Tail call optimisation in C++ -

Lighting talk - Tail call optimisation in C++ -

Scheme: pairs, lists and recursion -

Scheme: feel the cool -

JavaScript WTFs -

Goodness in programming languages, part 2 " getting your code running -

Goodness in programming languages, part 1 - syntax and layout -

2010

Anatomy of an interpreter: the Lexer -