Hi, I am Toby.

I am a software developer who loves to learn and teach. Currently my interests are compilers, programming languages, software architecture, assembly language programming, and debugging.

Videos ↓Writing

Algorithm Friyay

Free Up Disk Space with Recursion

Aug 20th 2021 • 1:02:52

Fun with ASTs

Aug 4th 2021 • 58:01

Fun with AST Part 2

Aug 6th 2021 • 59:56

Intro to Dynamic Programming

Sep 17th 2021 • 49:15

Intro to Dynamic Programming 2

Oct 27th 2021 • 59:39

I Tell Huiqi About

What is LLVM? I Tell Huiqi About It. Part 2

Jun 20th 2020 • 18:45

What is LLVM? I Tell Huiqi About It - Part 1

Jun 20th 2020 • 17:03

How Strings Actually Work - with guest Huiqi Zhou

Jun 5th 2020 • 27:50

Deep-Zoom Debugger Demo with Huiqi Zhou

May 16th 2020 • 17:47

How Databases Work

Sep 16th 2020 • 29:58

How Time Traveling Works

Nov 16th 2020 • 31:55

Memory Management with malloc and free

Nov 30th 2020 • 32:16

Games and Education

Dec 8th 2020 • 24:12

Automatic Reference Counting

Dec 9th 2020 • 31:31

Garbage Collection with Mark and Sweep

Dec 17th 2020 • 24:39

What it's Like to Code with a Time Traveling Debugger

Jan 11th 2021 • 47:52

Automatic Test Case Simplification Tool

Jan 27th 2021 • 23:28

rr and Time-Traveling Debuggers

Mar 10th 2021 • 29:00

dabeaz's Compilers Course And X86 Registers

Mar 10th 2021 • 15:22

Let's Talk About Performance

Apr 21st 2021 • 38:37

Learning C/C++ vs Go or Rust

Apr 21st 2021 • 06:39

Let's Talk about Performance! (2)

Apr 28th 2021 • 16:33

Python vs C: Side by Side (Plus Macros!)

Apr 28th 2021 • 12:02

Reverse Engineering with GDB

May 12th 2021 • 29:43

Visual Concepts: Subway Maps and Flight Paths

May 20th 2021 • 21:27

Visual Concepts: Social Graphs and Wikipedia Edit Histories

May 20th 2021 • 19:28

Making a Terminal-Based UI Framework

May 26th 2021 • 19:23

Law of Leaky Abstractions

Jul 7th 2021 • 10:39

Real World Leaky Abstractions 1: Kubernetes, ng, and React

Jul 14th 2021 • 13:30

Real World Leaky Abstractions 2: Sharing TypeScript

Jul 14th 2021 • 10:52

Real World Leaky Abstractions 3: Python and Having No Time

Jul 14th 2021 • 15:05

Can Leaky Abstractions be Solved?

Jul 14th 2021 • 08:43

Leaky Abstractions IRL

Aug 4th 2021 • 08:34

Thoughts on Ejecting from a Framework

Aug 11th 2021 • 07:21

How to Print a Booklet on OSX

Aug 12th 2021 • 03:26

Global vs Local

Aug 12th 2021 • 14:38

Time Machine Status Update 3

Aug 26th 2021 • 09:16

Seeing Code As Fractals

Aug 26th 2021 • 18:50

Time Machine Status Update 4

Sep 2nd 2021 • 04:40

Eureka Moments

Sep 2nd 2021 • 11:35

How to Code the Mandelbrot Set

Sep 30th 2021 • 35:26

GPUs, Shaders and OpenGL

Oct 21st 2021 • 32:30

Is Code Reuse Bad?

Nov 4th 2021 • 17:14

Live Code: LLVM Tutorial Walkthrough

What is LLVM? I Tell Huiqi About It - Part 1

Jun 20th 2020 • 17:03

What is LLVM? I Tell Huiqi About It. Part 2

Jun 20th 2020 • 18:45

LLVM Tutorial #1: Introduction

Jun 12th 2020 • 19:25

LLVM Tutorial #2: Lexer

Jun 12th 2020 • 29:41

LLVM Tutorial #3: AST Nodes

Jun 12th 2020 • 25:55

LLVM Tutorial #4: Recursive Descent Parser

Jun 12th 2020 • 28:34

LLVM Tutorial #5: Operator Precedence Parsing

Jun 12th 2020 • 25:18

LLVM Tutorial#6: Compilation Trouble

Jun 12th 2020 • 31:37

LLVM Tutorial #7: What is SSA?

Jun 12th 2020 • 25:37

LLVM Tutorial #8: CodeGen

Jun 12th 2020 • 28:18

LLVM Tutorial #9: CodeGen for Functions

Jun 12th 2020 • 41:17

LLVM Tutorial #10: Getting Out of Trouble

Jun 12th 2020 • 35:55

LLVM Tutorial #11: Playing with REPL

Jun 12th 2020 • 10:48

LLVM Tutorial #12: Optimizers

Jun 12th 2020 • 33:55

LLVM Tutorial #13: Optimizers Work

Jun 12th 2020 • 08:04

LLVM Tutorial #14: JIT

Jun 12th 2020 • 36:55

LLVM Tutorial #15: Finishing "The JIT"

Jun 12th 2020 • 24:24

LLVM Tutorial #16: If Expression Parser

Jun 20th 2020 • 30:40

LLVM Tutorial #17: The Φ (Phi) Function

Jun 20th 2020 • 24:55

LLVM Tutorial #18: CodeGen For If Statement

Jun 20th 2020 • 36:19

LLVM Tutorial #19: "If" It Can Work

Jun 20th 2020 • 19:44

LLVM Tutorial #20: For loops!

Oct 20th 2020 • 31:14

LLVM Tutorial #21: "For" Expr Codegen

Oct 20th 2020 • 40:10

LLVM Tutorial #22: Custom Operators

Oct 22nd 2020 • 27:07

LLVM Tutorial #23: Codegen for Binary Operators

Oct 22nd 2020 • 22:16

LLVM Tutorial #24: Unary Operators

Oct 22nd 2020 • 22:34

LLVM Tutorial #25: Mandelbrot?

Oct 22nd 2020 • 42:55

Nepo's bishop is TRAPPED?

Dec 7th 2021 • 00:47

Time Traveling Debugger

Time Traveling Debugger - Part 1

Jan 10th 2020 • 29:14

Time Traveling Debugger - Part 2

Jan 10th 2020 • 23:17

Time Traveling Debugger - Part 3

Jan 13th 2020 • 28:49

Dream of the Time Machine

Feb 21st 2020 • 29:30

Introducing the Deep Zoom Debugger

May 22nd 2020 • 05:17

Deep-Zoom Debugger Demo with Huiqi Zhou

May 16th 2020 • 17:47

Time Machine Status Update 1

Aug 19th 2020 • 36:22

Time Machine Status Update 2

Aug 28th 2020 • 27:43

Design Problem: Data Fetching Scheme of Zoom Debugger

Aug 31st 2020 • 37:40

How Time Traveling Works

Nov 16th 2020 • 31:55

What it's Like to Code with a Time Traveling Debugger

Jan 11th 2021 • 47:52

Time Traveling Debugger for Python

Feb 2nd 2021 • 35:08

Python Debugger Update

Feb 2nd 2021 • 18:54

rr and Time-Traveling Debuggers

Mar 10th 2021 • 29:00

Time Travel Debugging (in Python)

Mar 24th 2021 • 05:44

Omniscient Debugging (ODB) With Bil Lewis

Apr 1st 2021 • 45:24

TT Debugger Data Storage Optimization

Apr 7th 2021 • 22:46

Data Visualization in Debugging

Apr 7th 2021 • 17:46

Questions Developers Ask When Debugging

Apr 14th 2021 • 46:07

Let's Talk About Performance

Apr 21st 2021 • 38:37

Learning C/C++ vs Go or Rust

Apr 21st 2021 • 06:39

Let's Talk about Performance! (2)

Apr 28th 2021 • 16:33

Python vs C: Side by Side (Plus Macros!)

Apr 28th 2021 • 12:02

rr Time-Traveling Debugger

May 19th 2021 • 17:13

Making a Terminal-Based UI Framework

May 26th 2021 • 19:23

Debugging UI Widget with Time Travel

Jun 18th 2021 • 15:58

Building a UI Framework with Time Travel

Jun 18th 2021 • 19:14

An Interesting Bug

Jun 27th 2021 • 13:49

Time Machine Status Update 3

Aug 26th 2021 • 09:16

Seeing Code As Fractals

Aug 26th 2021 • 18:50

Time Machine Status Update 4

Sep 2nd 2021 • 04:40

Time Machine Status Update 5

Sep 11th 2021 • 11:40

Time Machine Status Update 6

Sep 16th 2021 • 13:55

Time Machine Update and Design Discussion

Sep 23rd 2021 • 42:53

Time-Travel Debugging with Robert O'Callahan

Feb 13th 2022 • 32:56

Code Exercise with a Time-Traveling Debugger

Sep 17th 2023 • 09:23

Time Travel Debuggers Talk

Jan 12th 2024 • 25:38

How to Make a Programming Language

What Does it Mean to Make a Programming Language?

May 13th 2019 • 18:32

Parsers and ASTs

Jun 13th 2019 • 08:50

Building MyPL Part 1 - Parser

Jun 13th 2019 • 16:33

Building MyPL Part 2 - Still Parser

Jun 24th 2019 • 21:35

Building MyPL Part 3 - Generator

Jun 24th 2019 • 18:48

How to Make a Parser using Nearley.js - Part 1

Jul 29th 2019 • 35:55

How to Make a Parser using Nearley.js - Part 2

Aug 2nd 2019 • 27:10

Make a Parser With Nearley.js - Part 3 - Handling Whitespace

Aug 15th 2019 • 11:00

How to Make a Parser with Nearley.js - Part 4 - Parsing String Literals

Aug 20th 2019 • 21:04

How to Build a Parser with Nearley.js - Part 5 - Operator Precedence

Aug 20th 2019 • 20:51

Build a Parser using Nearley.js - Part 6

Sep 10th 2019 • 09:06

Make a Parser with Nearley.js - Part 7

Sep 10th 2019 • 12:16

Make a Parser with Nearley.js - Part 8 - Making ASTs

Nov 6th 2019 • 29:45

Making a ProgLang - Evaluating ASTs

Nov 8th 2019 • 30:24

How to Build a Code Generator

Nov 18th 2019 • 18:45

The Fun Programming Language

Nov 18th 2019 • 13:15

Moo.js Tokenizer with Nearley.js

Feb 10th 2020 • 28:23

Earley Parsing Algorithm

Jan 17th 2020 • 30:53

Generating Friendly Parser Errors with Earley Algorithm

Jan 22nd 2020 • 21:05

Make Your Own Language 1: The Lexer

Jul 18th 2020 • 16:01

Make Your Own Language 2: The Parser

Jul 18th 2020 • 21:06

Make Your Own Language 3: Parsing Function Calls

Jul 19th 2020 • 16:25

Make Your Own Language 4: The Generator

Jul 20th 2020 • 17:35

Make Your Own Language 5: Runtime Functions

Jul 20th 2020 • 11:40

Make Your Own Language 6: Parsing Lambda Functions

Jul 20th 2020 • 18:38

Make Your Own Language 7: White Space and Ambiguous Grammar

Jul 25th 2020 • 17:40

Make Your Own Language 8: Code Generator for Lambda

Jul 25th 2020 • 10:57

Make Your Own Language 9: Comments and More Ambiguous grammar

Jul 27th 2020 • 10:10

Make Your Own Language 10: Coding Challenge

Aug 10th 2020 • 29:10

Parser Performance Story

Aug 24th 2020 • 24:20

dabeaz's Compilers Course And X86 Registers

Mar 10th 2021 • 15:22

Fun with ASTs

Aug 4th 2021 • 58:01

Fun with AST Part 2

Aug 6th 2021 • 59:56

Compilers Challenge #1: Reverse Polish

Oct 25th 2021 • 14:40

Compilers Challenge #1 Solution: Reverse Polish

Nov 2nd 2021 • 18:21

Writing ↑Videos