I've been starting these weekly posts with an update on how COVID-19 has impacted me in the past week. This week, nothing really changed. I'm still staying at home, still wearing a mask during my biweekly excursion to the grocery store, and still compulsively using hand sanitizer whenever I come into contact with anything from the “outside world”. I suspect this is how I know that I've truly entered into a “new normal” – when it's not even interesting to discuss anymore.

On Writing Well

This week I read On Writing Well by William Zinsser. It's an opinionated guide to writing non-fiction and seems focussed more at Professional Writers™️ than hobbyists like myself. However, there's a lot of useful suggestions nonetheless.

Zinsser spends many pages arguing for a straight-talking writing style: eschew adverbs, fancy adjectives, and cliches, but feel comfortable using the first-person “I” pronoun. Use a broad spectrum of verbs. Avoid neologisms and “Latinate nouns like ‘utilization’ and ‘implementation’".

I'm thinking about how to apply this book to my own writing. For example, I noticed that I have the tendency to add qualifiers like “kind of” and “a bit” to phrases, which Zinsser argues is a quality of weak writing:

Prune out the small words that qualify how you feel and how you think and what you saw: “a bit,” “a little,” “sort of,” “kind of,” “rather,” “quite,” “very,” “too,” “pretty much,” “in a sense” and dozens more. They dilute your style and your persuasiveness.

On a higher level, I also find that when picking topics to write about, it's easy to fall victim to topic creep. Instead of writing a wandering article about several aspects of a topic too large to discuss in a single piece, Zinsser advices to pick a very specific subtopic. Recognize that you won't be able to say everything about that topic, and decide on the most important single thought that drives a piece. The goal of an article is to ensure that, if nothing else, the reader internalizes that singular point:

Most nonfiction writers have a definitiveness complex. They feel that they are under some obligation—to the subject, to their honor, to the gods of writing—to make their article the last word. It’s a commendable impulse, but there is no last word.

As for what point you want to make, every successful piece of nonfiction should leave the reader with one provocative thought that he or she didn’t have before. Not two thoughts, or five—just one.

Reading through “On Writing Well” made me want to improve my recreational writing. When I was in school, I remember feeling satisfaction in wordsmithing an essay until it was as tight as I could possibly make it. I find it hard to summon the same energy to rewrite and revise blog posts. Of course, it's OK to write in an informal style, and not every blog post needs to be a master work. “Writing for quality” is a level above “writing as a means of organizing thoughts”; the latter is a process, the former is a craft.

“On Writing Well” reminded me that writing is a skill I want to develop, and that communicating clearly without jargon is difficult.


This week I wrote and published feedly-to-sqlite, a CLI tool to export your Feedly subscriptions to a SQLite database. This is part of my increasing usage of Datasette, a really cool tool for exploring datasets.

This fits within the Dogsheep ecosystem, which is a collection of CLI tools that export data from various internet services into portable SQLite databases. I've written similar tools for exporting data from Beeminder and Todoist. Dogsheep maintains a bunch of other exporters for services like Github and Twitter.

Datasette ingests the SQLite database(s) created by an exporter, and provides a friendly web interface for querying and basic visualization. It's the brainchild of Simon Willison, one of Django's co-creators, who has been using it for some cool data journalism projects.

This probably warrants its own post, but I strongly agree with the philosophy of Dogsheep: everything lives in a SQLite database (that you own!), each exporter tool is its own separate CLI, and Datasette is an extremely flexible tool to explore data. The Dogsheep ecosystem is totally self-hosted (you own your data) and free (as in beer), unlike personal data aggregator platforms like Exist.io and Gyroscope.


I was working on a large refactor at work this week. The technical details aren't super interesting, but the task involved performing a rote find-and-replace operations over several dozen files. I've been increasingly using codemod for these types of tasks.

Codemod allows you to search and replace using regex in a large number of files. There's nothing special about it. I'm sure you could replicate it's functionality with find and sed. But, it's good at what it does, and has some nice quality-of-life affordances, like prompting you for each replacement with an option to jump into an editor and make fixup changes on-the-fly.

  • This Decoder Ring episode on the 2011 viral hit “Friday” was excellent.
    • I remember when Rebecca Black's “Friday” first surfaced, the dominant narrative was that the music video had been paid for by Black's parents, with the insinuation that Black was a “spoiled rich kid”. Of course, this was used as justification for all sorts of mockery and internet bandwagoning. Unsurprisingly, the truth is more subtle.
  • Covid-19 Slang and How Language Evolves Quickly in Stressful Times by Jason Kottke.
    • In early march, I predicted that “social distancing” would be the word-of-the-year for 2020. Two months later, I stand by that prediction. COVID-19 has injected many new phrases into popular usage: “flatten the curve”, “essential worker”, “Zoom call”. I observed this week that my family uses “Zoom call” to refer to any video chat. Though we use a combination of Google Meet, Microsoft Teams, Facetime and, yes, Zoom for work and social occasions, “Zoom call” has become the colloquial catch-all.
  • Kevin Kelly's 68 Bits of Unsolicited Advice is worth a thorough read. These types of articles tend to be horrible listicles filled with survivorship bias. When this article first made the rounds, I skipped it. However, I'm glad that someone recommended it to me. Each of these bits of advice is worth pondering for a second.
    • My favorites:

      The purpose of a habit is to remove that action from self-negotiation. You no longer expend energy deciding whether to do it. You just do it. Good habits can range from telling the truth, to flossing.

      Optimize your generosity. No one on their deathbed has ever regretted giving too much away.

      How to apologize: Quickly, specifically, sincerely.

    • I also enjoyed reading Jason McIntosh's response.