Why be modular?

We want our software to be modular. We want it to be decoupled, well defined, etc. Right? Not exactly...

Limits and Derivatives

A visual explanation of the relationship between limits and derivatives.

Intern 2021: Finale!

A summary of my 2021 Google Internship and how I grew as a programmer this summer.

Intern 2021: Meetups!

Some appreciation for my hosts, mentor, and all of the people I've gotten to meet so far during my internship.

Intern 2021: Meeting Guide

Design document progress! And then a story of learning how to think about meetings, and prepare for them effectively.

Intern 2021: Feedback

Updates on my past two (very busy!) weeks, and a discussion of the best feedback method.

Intern 2021: Google!

I introduce by 2021 internship project: Project Cereal, a new serialization system for Blockly.

A Pattern Language Graph

The story of creating a graph visualization for the book A Pattern Language. Explores the struggle of finding the raw text, processing it using python, and finally visualizing it using gephi.

Lowest Common Ancestor

An explanation of an algorithm for finding the lowest common ancestor of two nodes in a directed acyclic graph. Includes pseudo code and gifs!

GSoC 2020: Final Submission

A summary of my 2020 GSoC project, and how I grew as a programmer this summer.

GSoC 2020: Unified Visions

Progress update on my GSoC project (decisions are getting made!) Then a discussion of Finnish Lessons by Pasi Sahlberg, and my theories about the reasons for America's stagnant educational system.

GSoC 2020: Gamification and Arbitrary Tasks

A small update on GSoC progress as I wait for code review. Then a discussion of gamification, and how I think it can actually be de-motivating.

GSoC 2020: Fundamental Unreformability

Progress on actually building the thing! Then some thoughts on the fundamental unreformability of school, and "How Children Fail" by John Holt.

GSoC 2020: Thoughts in Heads

Design document feedback, and some thoughts about thinking. Specifically knowledge, understanding, and productive thought.

GSoC 2020: The Science

A discussion of visual programming and some of the scientific papers I've been reading related to it.

GSoC 2020: In the Beginning

I introduce my GSoC 2020 project: Operation Options, Enum Blocks for MIT App Inventor.

Rotational Matrices

A visual, interactive explanation of rotational matrices and rotating points in 2D space.

Mutator API

We design a new Mutator API for Blockly. This post primarily focuses on how I would design a developer-facing API that is both useful and extensible. There is also a short discussion of implementation at the end.

Triangle of Power

An exploration of an alternative (read superior) exponent, root, and log notation.

Blockly Centerline Renderer

We create a new renderer for Blockly that renders connections and fields in lines, like a text editor. Includes a demo workspace and lots of code samples.

Type Checks Pt. 1: Statements

How to use Blockly's type checking system to define the order of statement blocks. Includes information about how Blockly's type checks work in the back-end, as well as many examples of how to use type checks to achieve specific behavior.

Shadow Blocks Pt. 3: Using Customized Fields

The final level of shadow customization. With a special focus on custom angle, number, colour, and text fields. Plus some downloads to help you get started using custom shadows.

Blockly Serialization: High Level Design

We design a new serialization system for Blockly. This walks you through what I think about when I design a new system. As well as the specific challenges that come with refactoring serialization.

Shadow Blocks Pt. 2: Creating and Customizing

How to create a shadow block. Plus why you should customize them, and how you can.

Shadow Blocks Pt. 1: Fields vs Inputs vs Shadows + Inputs

The difference between fields, inputs, and inputs with shadows. Plus the problems with and use cases for each.