Programming

Welcome to my programming page. I'm entirely self-taught in programming, and I must say I'm quite proud of how far I've come from my first foray into Racket in 2016.

Languages

I know a bunch of programming languages. The ones I use most often are, in alphabetical order…

Awk
I like awk to an unhealthy degree. I even wrote a collection of awk scripts to compile grade reports for students at the end of the semester. It includes a transpiler to LaTeX so I can hand the reports to students who have questions about their grades, and did all the computations automatically based on a few parameters.
Bash/Zsh
I use Linux, so these are required for survival. I make an effort to ensure most of my scripts are POSIX if they'll see heavy use.
Haskell
Probably my favourite language, I've written too many things to enumerate them here. The most useful is a framework for CV-writing with exporters to a bunch of different formats. Possibly the silliest was a compiler that takes a mathematical knot (specified by a string) and outputs TikZ code to produce that knot in LaTeX documents. There are also too many times to count where I've written a program to test a conjecture using Haskell.
LaTeX
I mostly just typeset with this one, but I'm quite adept. I really like making TikZ diagrams of complicated mathematical structures.
Lisp
I know and use various flavours. Most often I'm working with Elisp—the language of God's own text editor.
Python3
This was the first language I learned and used frequently. I've used it for everything from testing conjectures, to automation on my machine, to experiments in machine learning. If I need to write a one-time script to just get something done on a time limit, this is usually my go-to unless there's an obvious reason to use another language.
Rust
Rust is pretty great for making command-line utilities. I've written a bunch of those, and a bunch of little utilities to make demonstrations for students in various courses I've taught. The biggest hit in class was an implementation of a TUI version of Ultimate Tick-Tack-Toe.

I also know and have used the following languages for various projects (most of them were math related): Clojure, Elm, Gleam, JavaScript, Julia, Nim, OCaml, Prolog, Racket, and Scala.

I'm hoping to play around with these in the future: ATS, Hare, V, and Zig.

Projects

It's a bit sparse at the moment, but the plan is to slowly fill this space with more projects I've done.

Neko Lang

This project has its own homepage which includes a lot more details and a REPL for you to try it out for yourself! At the time of writing (<Saturday, 2 November 2024>), the project continues to expand. Feel free to suggest improvements via email.

I stumbled on a stack-based, imperative and functional, esoteric programming language called Cat a while back. I liked the idea, and decided to implement a version of the language myself. I call my version Neko, a trans-litter-ation of the Japanese word "猫 (ねこ)", which means "cat".

I've implemented Neko in a bunch of different lanugages including Haskell and Rust, but wanted a way to share it with a large audience. I also wanted to prove to a friend that it is possible to write a robust web application using only the core JavaScript (none of the frameworks everyone seems to like to slow my browser with). Even with a lot of code to make the output pretty and a ton of comments, the whole project comes in at about 2000 lines of code.

One of the main reasons I like this language and the project is that the language is incredibly algebraic. I plan to write a blog post about the inherently mathematical nature of the language. This includes a few theorems I discovered in its algebra that I find interesting.