Technical Blog

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

21 Feb 2023

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. 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.

...

Changes in Career Aspirations

3 Feb 2023

It's interesting for me to reflect on how my aspirations have changed as I've grown up. When I was a little kid I wanted to be a computer programmer like my daddy. I wanted to have my own cubicle and a work station and write Perl programs all day long in Emacs.

There was a phase where I had to shake my head at that—a cubicle-dweller? Seriously? After experiencing some open-office work spaces, the shoulder-high walls afforded a privacy and sound muffling that any hipster coder would be envious of.

...

What is a type system, really?

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.

...

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. I find that much more comfortable to use.

...

Christmas 2022

25 Dec 2022

This year I discovered the profound joy of giving toys to a little girl. Our daughter is beginning to babble and walk, and nothing has brought me more happiness than playing with her and watching her grow in her capabilities. She's still young enough that she has no clue as to what is going on, but she did like getting some new toys wrapped in paper and bows! Christmas is so much better giving presents to your kids than it is getting presents as a kid.

...

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.

Critical letter forms: i, I, l, 1; o, O, 0

These are probably the most important letters to get write in any font that's meant to be hyper-legible: lowercase l must be easily distinguishable from an uppercase I or the number 1, and the lowercase i should stand out nicely as well.

...

Never surrender your password

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.

...

Continuations—what are they?

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.

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.

#lang racket

;;; Export these symbols
(provide fail pick non-deterministic-factor)

;;; Global stack of choices (only visible to this module)
(define *choices* '())

;;; Pop a value off of the alternate choices stack
(define (fail)
  (if (null? *choices*)
      #f
      (let ([next-choice (car *choices*)])
        (set! *choices* (cdr *choices*))
        (next-choice))))

This next function pick is where we capture the continuation. I've named it return-from-pick to illustrate that when you call this function, it will jump back to the point in the code where pick returns. However, this works even if you use the continuation after the thing the called pick itself has returned.

...

Unix as a tool forge

7 Nov 2022

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. 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.

...

Yet another blog revamp

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!

...

Mastodon