16 Mar 2023
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. These programmers like high-level languages and mathematically correct reasoning about programs.
...
21 Feb 2023
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. Almost all my time was spent building features and squishing bugs. I got a lot of really good feedback on all my pull-requests, as everyone there really cared about making a good-quality product.
...
23 Jan 2023
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. C’s types are different from Java’s in a big way: in C they’re really just directives to the compiler on how to interpret some bytes. “Everything is just void *
” is kind of true. In C, bytes can be interpreted however you wish.
...
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. I find that much more comfortable to use.
...
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.
...
22 Nov 2022
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. I took my laptop to the Apple-authorized repair service at my school. The surly technician confirmed my warranty and asked me to fill out an intake form for my computer.
...
17 Nov 2022
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.
...
7 Nov 2022
Wikipedia 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. The first rule—writing programs that do one thing well—is largely a means to the second. When you have building blocks that take simple shapes, you can compose them easily like Lego pieces.
...
26 Oct 2022
Yes, it’s time to redo my blog again.
This time I found an ultra light-weight blog theme. This page here is under 100KB!
I wanted to make something that acts more like a homepage for my research, rather than a blog. I still have all my blog posts, but now the focus will be on a more professional presentation of my work.
This theme is really what I’ve wanted all along: a home page with a max-width for the text, table of contents, and built-in local search!
...
28 Aug 2022
It’s hard to overstate how important email is in our modern world. Even as hip new platforms like Slack &co. gain traction in the workplace, so much communication takes place in a crusty old medium that’s outlived every purported “email killer”. Where does it get its staying power from?
Email predates much of the Internet as we know it today. Its current incarnation first emerged in the early 80s, though it has roots in earlier forms of digital messaging from as far back as the 60s. “Email” is roughly three related protocols: SMTP, “Simple Mail Transfer Protocol”, which deals with the sending of mail; IMAP, or “Internet Message Access Protocol”, which allows mail clients to fetch mail; and POP3, or “Post Office Protocol”, an older mail fetching protocol largely superseded by IMAP.
...