Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Casual programming

I’ve got three young kids. If you were to spend a day in my house, one thing you’d notice is that there are a lot of alarms going off.

Time to leave for school. Time to brush teeth. Time to finish the bedtime story and get into bed.

Maybe it sounds stressful — but for us it’s the opposite. Making liberal use of alarms and timers makes our daily routine smoother and calmer.

Like many people, I also rely on my Calendar app to make sure I’m in the right place at the right time. So naturally, at some point I started wishing that I could make my alarms a bit smarter by combining them with my calendar. For instance, next week are school holidays here in Bavaria — so we obviously don’t need an alarm telling us that it’s time to leave for school.

A small matter of programming

You could think of this as an example of end-user programming. But I’ve always found this term a bit odd, because it implies a dichotomy: either you’re a programmer, or an end-user.

To me, the more interesting distinction is the context of use. I’m a professional programmer, and there’s a whole class of problems that (a) I know I could solve by writing some code, but (b) they’re not really Serious Business™.

There’s an abyss to cross between using an app and modifying it with code by calling APIs. The user has to switch to a whole other paradigm including setting up a development environment. Consequently, few users take the step from using a tool to customizing or making their own tools.

At Ink & Switch, we believe that software should be extensible in an easy, everyday manner. We believe users want to automate, customize, or even make their own tools without much ceremony.

Lately, I’ve started to prefer the term casual programming for this kind of thing. It’s arguably a slightly different concept than end-user programming. As Bonni Nardi wrote in A Small Matter of Programming:

End users are not “casual,” “novice,” or “naive” users; they are people such as chemists, librarians, teachers, architects, and accountants, who have computational needs and want to make serious use of computers, but who are not interested in becoming professional programmers.

To me, the distinction is important: I’m specifically interested in ways of making the power of programming available in a much more casual, informal way.

Some use cases

Since I’m interested in better tools to support Casual Programming, I wanted to have a bunch of concrete use cases. So, for the past couple of years, I’ve been jotting down a note whenever I find myself with a need for some casual programming.

The full list probably isn’t interesting to anyone but me, but I thought it would worth sharing some of my use cases. At a high level, there’s one thing that sticks out to me: there’s little computation involved in most of these. They’re mainly about data wrangling and automating tedious manual tasks.

Anyways, here are some of my use cases for casual programming1:

  • Controlling iOS alarms based on my calendar events:
    • If we’re driving to school, we need to leave five minutes earlier than if the kids are getting picked up.
    • Disable the alarms on school holidays.
    • When I’m away from home, ring the alarms on my wife’s phone.
  • Carpooling:
    • We have everybody’s addresses and constraints (number of seats in the car, etc.) Want to figure out an optimal (or near-optimal) arrangement for car pooling.
    • Once we’ve figured out who we’re driving with, we need to create a schedule for who is driving when — leaving out all of the holidays (which are already in my calendar).
    • Then, create calendar events for all the days that we have to drive.
  • Bulk editing of Google Calendar events, e.g. moving them all into a new calendar.
  • Custom rules for calendar notifications. For doctor’s appointments, etc., I like to have multiple notifications. Typically the night before, first thing in the morning, and then ~1 hour before (depending on travel time). You can do x hours before / x days before in GCal, but not more sophisticated.
  • My kids listen to Bibi & Tina stories via a huge playlist on Spotify. I want to extract out the individual episodes into their own playlists.
  • Automating some things I do frequently:
    • Updating my finance spreadsheet: download CSVs from bank sites, and import them into the spreadsheet with the right options.
    • Every month I send an email to my accountant with my income and expenses for the month. Most of the time, it’s the same monthly expenses, which I download from my email and from various web sites.
    • At our kindergarten, we need to order lunch every week, and we can only order so many weeks in advance. I’d like to automate an order every Friday. Bonus points: send me an email/text, I can reply to and say which days to skip.
  • Small task-specific workflows:
    • Preparing photos to get printed at the drug store: airdrop them to my Mac, crop them to a particular ratio, convert to jpeg, upload them to the drug store’s site for printing.
    • Putting images into my blog posts: put them in the right directory, resize to the correct size, give me the Markdown image syntax (which I always forget).
    • Preparing taxes: each document I scan should get copied to a specific folder, named according to my naming scheme, and have its name and summary added to a doc.
    • The diagrams in our book are made with TLDraw. For each diagram, I need to export the drawing in two different ways (with and without a transparent background) and save it to a specific directory.
  • I have a list of movies, books, etc. I want to read. Would like to easily see which movies are available on the streaming services I subscribe to, which are available to buy at the local bookstore, etc.
  • Hide parts of a web page with certain text / properties. I was trying to book a bouldering course for my daughter, and wanted to filter the calendar on their web site to hide all the slots for age groups other than hers.
  • Buying something online, some of the data I cared about was hidden, and I had to mouse over individual products to see it.
  • Given a list of links, visit each and find out which ones contain some specific text.
  • Out of all the citations for a certain paper, I’m curious how many of them cite it for specific reasons, vs. citing it in a broad way. I’d like to go through a list of citations on Google Scholar, and in each paper, find the place whether the other paper is cited, and capture 1-2 sentences of context.
  • Comparing prices for different brands of omega-3 supplements. There are all kinds of different dosages, and I want to figure out which one has the lowest price per mg.
  • Go through a Figma doc and find all text with font size X, and increase it to X+12.
  • When I’m rebalancing my ETFs, I have a target amount in Euros that I want to buy or sell, but the interface makes me choose the number of units. I’d like something that can read the price off the page and let me type in the amount I want to buy / sell.

  1. Keep in mind that I’m not saying that thare aren’t already tools or apps to solve these problems. They’re just examples of times when I thought, “If only I could just write a little script to do this…” ↩



This post first appeared on Dubroy.com/blog, please read the originial post: here

Share the post

Casual programming

×

Subscribe to Dubroy.com/blog

Get updates delivered right to your inbox!

Thank you for your subscription

×