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 ofawk
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 ( ), 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.