Segmented Identity as Necessary for Daily Life

January 17, 2021

A picture of the 'dodecahedron' character from the book 'The Phantom Tollbooth'. Like his namesake, he has many faces.

This is going to be a bit of a long post. I’m going to take a deep dive into a view of identity that, depending on your background, might either seem unconventional or completely obvious. I’m going to talk about how this view relates to privacy, consider how it interacts with technology, and explore the values that underpin what we build.

But first, let’s talk about a scenario that’s probably been rare for most people this past year: meeting someone new.

Read more…

The Correct Way to do Sentence Spacing

August 16, 2020

Back when I first redesigned this blog, I mentioned that I drew a lot of inspiration from the online ebook Practical Typography by Matthew Butterick. That book helped guide a huge amount of this website’s design, from the font choice, to the line length and spacing, and is arguably responsible for the reading experience you’re having right now. I still recommend it to this day, since following its guidance can help make any text you write readable and pleasant to look at.

Butterick is a very opinionated guy, and the book bears this out. One of the early chapters in his book is titled One Space Between Sentences, and it’s best summarized by quoting the first two sentences:

Some topics in this book will offer you choices. Not this one.

Always put exactly one space between sentences.

Read more…

Know Your Historical Context

May 17, 2020

I recently turned 30. For a lot of people, capping off another decade like this can a pretty sobering experience.

For me? Eh. I saw it coming.1 Back when I turned 27, I remember noticing that the addition of one year caused people to change from rounding down to 25, to rounding up to 30. “I’m not old yet,” I thought, “but I do think I’m running out of youthfulness.”

But there’s a silver lining to all this: I now have more social license to be the grouchy old man that I was always meant to be. “Get off my lawn!” I’ll shout, assuming I can ever afford a house big enough to have a lawn.

So I’ll start now with one example: it’s really striking how things that you saw develop over the course of your life end up being taken for granted by those who are younger. For them, this is the way things have always been. For you, you can trace it back through your memories: these were decisions that were made in a specific historical context, and have been maintained due to inertia even when the context for them breaks down.

So in this article, I want to focus on a specific example of this from the tech world, that I’m surprised people don’t talk about more explicitly:

A screenshot of me messing with Twitter's character limits.

Twitter’s character limits.

  1. That said, I didn’t expect that I’d be celebrating it quietly during a massive pandemic, but I won’t get into that in this article. We’re all living through this, I’m sure you don’t need me to tell you about it. ↩︎

Read more…

Smart Pointers and Memory Ownership in C++ Libraries

January 17, 2020

I don’t often get deep into technical minutiae on this blog, preferring to write for a more general audience. Despite that, programming computers is still my day job, and the articles that do get into technical detail tend to get people interested: the article that dove deep into the type system I developed for my thesis got some recent attention from Hacker News, the article about how to extract messages from WeChat is consistently one of the pages with the most hits (presumably because it’s useful to some people), and I’ve even gotten some good feedback and attention to my unpolished and unedited programming languages notes from university, which I only barely ever publicized.

I’ve even gotten a bit of a reputation at work as someone who can explain things to people in a way that’s understandable. I’ve been trying to lean into that strength at my job, and while I’m doing that, I may as well bring some of that knowledge to the outside world as well, where appropriate.

All this to say: this article was adapted from something I wrote at work, in order to explain some subtleties about how smart pointers in modern C++1 work to people that only had experience with older C++. More specifically, this gets into how the way you use smart pointers should impact the design of libraries and their APIs.

  1. For the purposes of this article, we’ll assume that “modern C++” means C++11 and later, whereas “older C++” means everything before C++11. ↩︎

Read more…