Technical Blog

The kind of thinking computer science enables

11 May 2023
Computer-Science, Education

I believe computer science plays as integral of a part to a well-rounded liberal arts education as does mathematics and linguistics. Why? A liberal arts education is designed to help you think in new and better ways. Computer science teaches novel ways of thinking, reasoning, and approaching problems that are hard to get anywhere else. I took a class on pedagogy when I encountered this puzzle. I answered the question easily, and I caught myself using reasoning patterns from work in programming coming to the forefront. ...

Using a Real Mail Client with Outlook

3 May 2023
Emacs, Mu4e, Email

I recently managed to get access to my Outlook email from Emacs. This took some doing as my university had disabled app passwords. I consider Outlook to be harmful, but inasmuch as companies and schools continue to enforce OAUTH-only authentication with email systems, it is good to find workarounds. This is how I set up email sending/receiving on my computer running macOS with DavMail. I also use mbsync (confusingly also known as isync) to actually fetch my email, and mu/mu4e to index and read mail. ...

Praise for the pragmatic third camp

16 Mar 2023
Programming, Philosophy, Business

Some years ago I came across a blog post that described programmers as being in one of three camps. It's a fun, short post, so I encourage you to go read that real quick, but the gist of it is that programmers generally fall into one of three categories according to what they primarily value: Applied mathematicians, who appreciate elegant solutions to problems. Program execution on von Neumann machines is incidental. ...

Metric Worship, or: How a bad manager wrecked a (small) company

21 Feb 2023
Management, Career, Philosophy

The story I once worked as a part of a company with four employees, all of us programmers. We formed a sort of daughter company with a bigger—though still modest-sized—company that handled our payroll and whatnot. Our work directly helped the parent company, but we were organizationally independent development-wise. I really liked working with that small team: we had a one-hour meeting each week to plan out our work, and a short, casual stand-up each morning to get things rolling. ...

What is a type system, really?

23 Jan 2023
Computer-Science, Programming-Languages, Type-Checking

Background # This is a question I’ve been wrestling with for a little bit. My first experience with a type system was with Java, and I didn’t like it. It just felt like an annoying constraint on the kinds of programs I could write. I was coming from Perl, which sports weak dynamic typing, so Java’s rigidity came as a bit of a shock. After Java I learned some C, which too has types. ...

Make an Emacs Buffer Open the Way You Want

27 Dec 2022

Are you tired of having a particular buffer pop open in the wrong direction? Do you wish, for example, that the Racket REPL buffer showed up on the right in a vertical split, rather than below in a horizontal one? Look no further. I give you, display-buffer-alist: (add-to-list 'display-buffer-alist '("\\*Racket REPL </>\\*" (display-buffer-in-direction) (direction . right))) That little snippet will make sure when you hit C-c C-k inside of a racket-mode buffer, a REPL will pop up on the right-side instead of on the bottom. ...

What I Like in a Font for Code

5 Dec 2022

I'm well aware that I may have a bit of an obsession with fonts. I don't think that's too unusual for someone who works in tech, however. Sites like Programming Fonts exist to let people test drive and compare a bunch of different fonts. Just for fun, I thought I'd write up some of the features I look for in a programming font that I've come to deliberately pick out. ...

Never surrender your password

22 Nov 2022
Privacy, Encryption

In a study that Ars Technica reported on, researchers found that an alarming number of computer repair technicians snooped through clients' devices—and female clients were way more likely to have their data accessed. Yikes! I once had to take my laptop to get some repairs done. The TAB key on my 2016 MacBook Pro had started glitching, and that wasn't going to fly when I was working on code and needed my tab completions and app switching to be seamless. ...

Continuations—what are they?

17 Nov 2022
Tutorials, Featured
Programming, Programming-Languages

I had a friend ask me what continuations are, and why they're useful. There's a ton of literature about continuations; this is just a simple example meant to showcase something small and hopefully grokkable. You will need to understand a little bit of Racket, but if you know any Scheme, that should be good enough. If you just want a quick primer, check out Learn X in Y minutes for Racket. ...

Unix as a tool forge

7 Nov 2022
Programming, Technology, Emacs

Wikipedia1 cites a few different sources on what "Unix Philosophy" is. Peter Salus summarizes it as: Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface. That second bullet point is my favorite: making composable programs rather than monolithic systems. In this way, Unix is designed to be a forge for easily building new tools. ...