We aren’t usually operating at peak mental capacity over here. When I do have some brain, I try to spend it on mitigating the low-brain situation. For instance, we want to make sure we keep sharing photos of Taavi. Like this one:

Taavi, chillaxing


  1. Continue to publish baby photos at the URL http://photos.theschleiers.com
  2. Make it safe for us to keep taking photos
    1. Save them to our computers first (where they get backed up), then publish
    2. Limit potential damage from making it easy (below)
  3. Make it easy for us to publish new photos
    1. Manipulate albums as network folders
    2. Sort gallery view by date (not filename — everyone’s are numbered differently)
    3. Use the same URL for uploads, because we’re not trying to have more things to keep track of

Things that didn’t work

Bekki and I both use Macs. The Finder is a WebDAV client. Having refactored all my sites to Lighttpd, I was hoping to use its WebDAV module. But it turns out the Finder is a pretty demanding WebDAV client. nginx’s WebDAV module interoperated poorly too.

I was reminded that the Finder is also an FTP client. I got as far as trying it, only to find out it’s read-only.

I reviewed which network protocols the Finder can read and write, and which servers interoperate. All signs pointed to Apache’s WebDAV implementation. I was reluctant, but accepted the need to allow Apache back into my life.

Under controlled circumstances

My internet-facing reverse proxy is still Pound. Nearly all my sites are still Lighttpd. Now there’s one site that’s Apache. I’m okay with this because:

  • Our originals are elsewhere, and backed up. What you see are copies. If an attacker gains access, they can’t make us lose photos.
  • This Apache instance runs as its own Unix user. If an attacker gains access, they can’t make me lose other stuff.
  • I learned last time around how to make a small, self-contained Apache config. I feel confident in my understanding of what it will and won’t do.

How it works

Last week, when Pound received a request for photos.theschleiers.com, it delegated to my instance of Nathan Arthur’s Gallery app.

This week, Pound delegates to Apache, and Apache delegates typical browser requests to Gallery. For you, no visible change.

When Apache receives a request from a client that looks roughly like the Finder, it requires a login, then speaks full Finder-friendly WebDAV. When Bekki or I have new photos to share, we just copy them over.

Here’s the Apache config that made it safe and easy for us to post photos from Taavi’s third week.

Posted Thu Jun 29 17:01:39 2017 Tags:

Kid’s here. Family’s visiting and helping out. Some days we almost feel rested. When there’s downtime I don’t need to sleep through, I’m thinking about how photos move from our phones to our gallery. How can I make this easier, so we do lots of it? How can I make it safer, so we don’t lose stuff?

Since I’m happily not working — a tremendous luxury for which I’m tremendously grateful — I can plow through allergy shots. Three mornings a week I take care of the non-human animals, go get my arm itchy, and run an errand or two on my way home. The sooner I’m further along with the shots, the sooner I may start to feel some benefit, and the sooner I can go get itchy much less often. That’ll be convenient if I ever commute to a job (still hard to imagine), or when we bring Taavi to Germany for the winter holidays.

Diet: Haven’t eaten anything stupid, but on net it’s been more protein, less fat, and less meat than I’d prefer.

Exercise: Nope. Not thinking much about it yet. If the dog could walk faster, that’d count for something, but he mostly can’t.

Music: Medtner, Brahms, Schumann.

Posted Fri Jun 16 23:02:40 2017 Tags:

Our child arrived a week ago, at 6 pounds 6 ounces on 6/6. On Friday, we introduced him to his grandparents via Skype, showing them his name on an iPad. It looked like this:

Taavi Lua Schleier with big letters

We’ve been home for a few days. Yesterday Taavi looked — and looked! — like this:

Taavi Lua Schleier with big eyes

I don’t know what Taavi looked like while listening to me play the piano last night. If indeed he was listening, he heard bits and pieces of Medtner’s “Dance Tale”, Op. 48 No. 1, and then the Brahms Intermezzo, Op. 117 No. 1 I had hummed to him in the cocoon.

My sister and both grandmae have held him. Grandpae and Bekki’s brothers will soon. Everyone is happy and healthy. About the name:


Finnish/Estonian variant of Hebrew David, “beloved”.

  • We like the sound
  • We like the meaning
  • We like the Hebrew connection
  • We like how Germans and Israelis and Americans will be able to pronounce it
  • After a couple days with him, we both independently decided he’s Taavi (and not the other names we were thinking about)
  • Amitai likes being able to vaguely associate the name with Medtner (of Livonian descent, Germans who settled in the Baltics, of which Estonia is one)
  • Sounds phonetically related to “Amitai” and “Bekki
  • The first “a” is in memory of our friend Andrew


Portuguese, “moon”.

  • Born under a big moon (waxing gibbous), and he went home on the full moon
  • We like the sound
  • We like mixing languages for our citizen of the world
  • We like the reminder to look beyond our world
  • We like the association with our love and memory of another very special animal, Lunar
  • We like the association with our Haskell, by virtue of both being programming languages
  • The Lua programming language is included in NetBSD, an open-source project which led Amitai to friends, Columbia, employment, and ultimately Bekki
  • Amitai has even written a little Lua

Taavi Lua Schleier

  • We like the sounds together
  • The names and initials aren’t obviously embarrassing
  • It’s unique enough
  • It means enough
  • It reflects our heritages enough
  • It will sound like a grownup when he’s a grownup

More nice properties observed after the fact

  • Taavi:
    • Abba: תביא (ta-VEE, emphasis on second syllable) means “bring” (imperative), which is what the doctors needed to do
    • Abba: תו (tav, “musical note”)
    • Abba: “Tavi” is a Hebrew name these days apparently
  • Lua:
    • Bekki: “Mondschleier” (”Mond” is German for “moon”) is the halo around the moon
  • Whole name:

If you think of another reason this is a nice name, please pass it along.

For my Lean/Agile/XP/systems/org-thinker readers

Taavi embodies the famous Peter Senge adage “People don’t resist change. They resist being changed.” But he’s getting used to it.

For Taavi to understand someday

Bekki & Amitai lock

More photos


Posted Wed Jun 14 10:51:37 2017 Tags:


This is the eighth in a series of “Nifty and Minimally Invasive qmail Tricks”, following

  1. qmail + SMTP AUTH + SSL + TLS - patches
  2. qmail + badrcptto - patches
  3. qmail + NetBSD nightly maintenance
  4. qmail + IMAP-before-SMTP
  5. qmail + spam filtering
  6. qmail + SMTP AUTH + TLS redux
  7. qmail + outbound DKIM

The mess822-QMAILQUEUE patch

This is not the QMAILQUEUE patch by Bruce Guenter that’s included in netqmail. When you want qmail-smtpd(8), for instance, to be able to modify or reject incoming messages by inserting a wrapper around qmail-queue(8), the QMAILQUEUE patch makes that easier.

The mess822-QMAILQUEUE patch is the exact same idea (and code), but for mess822.

If QMAILQUEUE is set in the environment, ofmipd(8) (and new-inject(1)) run that program in place of qmail-queue, allowing you to modify submitted messages in arbitrary ways, above and beyond mess822’s own rewriting features.

Your wrapper needs to adhere to the qmail-queue(8) interface, and should probably conclude its work by running the real qmail-queue binary, which — since you’re applying this patch — can stay right where it is.

With the QMAILQUEUE patch, rather than write your own wrapper, I’d suggest using Bruce Guenter’s qmail-qfilter and writing your own filters. With this mess822-QMAILQUEUE patch, I suggest the same.

(I hope to take advantage of this patch — already included in the ofmipd SMTP AUTH patch I’m using — to tag my occasional messages to DJB’s mailing lists with Charles Cazabon’s pymsgauth, so they get posted without my manually interacting with qsecretary.)

To set QMAILQUEUE in ofmipd’s environment:

  1. Find your ofmipd(8) invocation.
  2. If it doesn’t already call env(1) to clear the environment, add that.
  3. Look for where env is called, and pass QMAILQUEUE=/path/to/your-wrapper-program-here to it.
  4. Restart your ofmipd service.

If you’re using qmail-run from pkgsrc, that’s as easy as:

  1. echo "qmailofmipd_postenv='QMAILQUEUE=/path/to/your-wrapper-program-here'" >> /etc/rc.conf
  2. /etc/rc.d/qmailofmipd restart

Here again is the mess822-QMAILQUEUE patch.

Posted Sat May 27 12:37:16 2017 Tags:

Then and now

A few years ago, after a long stretch of not feeling heard in my job, I resolved to change that, starting with getting a different kind of job. Then I started attending conferences, making Agile in 3 Minutes, and appearing on Agile for Humans and other podcasts. Finally, I found myself at many of the same conferences as a speaker, sometimes even by invitation.

This took a nonzero amount of luck and a lot of effort. I put in the effort because, as a human being, I needed to feel heard at work. If you’re reading this, odds are you’re a human being with the same need.

Today I expect that I can mostly get myself listened to, and am surprised (and indirectly, gratified) on the rare occasions when I can’t. Compared to myself a few years ago, I feel relieved, empowered, and a little scared. Scared? Yeah, sometimes. When folks are apparently much more inclined to try as I suggest, it becomes much more important that I suggest wisely.

Them and me

My path here was, and is, smoother than others’. One way I’ve come to understand this: when I go to conferences, the worst I ever feel (or expect to feel) is introvert-overwhelmed. It happens. I have to strategize what to do when I notice my tank is running low, or when I’ve failed to notice for too long. Either way, it can usually be as simple as going back to my hotel room.

Another way I’ve come to understand this: when I go back to my room, I’ve never been followed there, or been creeped on or harassed in any number of other ways. So I’ve neither had to deal with those things as they’re happening, nor had to decide whether I’m going to sign myself up to strategize how I’ll deal with those things happening again.

Finally, and most clearly, I’ve come to understand this by hearing from people who are no longer willing to attend a conference unless it has a Code of Conduct. I haven’t experienced what they have, so I’m still willing to go, I think (it’s been a while since I had to choose). The thought that I’m able to feel comfortable in a place where others might not be makes me wonder: when I’m there, what I can do about it?

I’ve started doing a small thing.

Me and you

If you’re in a position like mine — where you’re listened to and heard — you have currency. I’d like to suggest a small investment you can make with it.

When you’re presenting at a conference, spend three of your minutes giving a quick overview of the Code of Conduct that’s in effect:

  • Where to find it
  • What it can and can’t do
  • Key examples of language to look for
  • Some ramifications for the audience and the conference as a whole

If the conference doesn’t have a Code of Conduct, say that out loud, along with this one weird ramification: some of the people we could have learned the most from aren’t here.

If the conferences where you’re speaking are technical and/or Agile, you can relate all of this to TDD and/or BDD, and encourage folks to pair afterward on example scenarios for shared understanding.

Invest wisely

Why do I suggest this? Because in my limited experience of not being listened to, followed by being frighteningly well listened to, I can begin to guess what it’s like to be frightened of worse things and then of not being listened to about them. And I can begin to guess, when humans want to add to our communities and we don’t take small chances to try to include them, how much the rest of us lose.

If you have currency, consider making a small investment. The returns may surprise us all.

Steal freely

Here’s the text of the slides I’ve been using for my last several presentations (example). The content is licensed CC-BY-4.0 or in the public domain, whichever you prefer.

Copy, modify, and present as you wish. Please share what you learn!

Posted Wed May 24 16:32:06 2017 Tags: