Python is not a DSL

April 16th, 2023

I’m noticing a common anti-pattern of defining declarative DSLs in Turing complete languages — specifically Python — to avoid the overhead of learning new syntax and tools, XML or JSON, and just reusing the Python compiler: Blaze, Airflow, dataswarm. datasets, for UPM semantic tree, Or Gradle with Ruby.

This is a very bad tech debt that causes massive problems (security, indeterminancy, irreproducibility) and has heavy cost. Never do this. It always leads to a huge expensive effort to redefine the language as its own thing (not Python) that still looks like python, and the team ends up writing a complete parser in addition to everything else. XML is not that hard. Nut up and learn it.

Do not write declarative configs in a Turing complete language.
Do not invent Python subsets for config files. Starlark

How many times have you seen someone use a hammer to pound screws because they are a hammer expert, they are comfortable with hammers, they don’t know how to use a screwdriver, and they don’t want to take a week to learn how to use a screwdriver?

Pointless Confirmation

December 14th, 2020

Here’s another example of confirmations that shouldn’t happen:

Are you sure you want to change all similar documents to open with the application “”? This change will apply to all documents with extension “.py”.
Read the rest of this entry »

The Browser Privacy Plugins You Need

November 3rd, 2019

There are so many privacy-enhancing extensions out there, it’s hard to keep track of which do what and where they overlap in functionality. Since an excess of extensions and plugins slows down your browser, I’ve decided to keep an updated list of what I recommend and use as well as the defaults that need to be changed. The following recommendations are as of October, 2019. I’m focusing on a relatively straightforward experience that doesn’t interfere with day-to-day surfing, break a lot of websites, or require extreme technical knowledge. (That is, no NoScript or GreaseMonkey.)

This article is primarily focused on desktop browsers. I might have more to say about mobile platforms in a future post.

tldr; Use Firefox 70 or later with these three extensions:

Read the rest of this entry »

Now on App Engine Standard

November 18th, 2017

If you’re reading this, you’ve stumbled across the HTTPS secured and IPv6 enabled version of the Cafes. This has moved from a classic shared Linux server on to App Engine Standard on GCP. The transition is still in progress and was not without bumps.
Read the rest of this entry »

Error Dialogs for the Internet Age

February 8th, 2016

Here’s a red error message Eclipse popped up on my screen today:

No server type definition

There are a lot of things to complain about here, but the main one is not obvious from a static screenshot (though it turns out a static screenshot has exactly the problem):

The message cannot be copied.
Read the rest of this entry »