It's not the first time I've had to use my drill-sergeant voice on the subway, but it is the first time I got an entire subway car full of people to give me a round of applause (and to have someone give me $20 for my effort). I was coming home tonight from work, and got on the uptown A train at Columbus Circle. It wasn't packed, but it was decently full, so I stood near the end by one of the standing poles.
Tonight's culinary experiment was a success. Last week needing buttermilk for some biscuits but not finding any at the local grocery, I grabbed a quart of kefir — figuring that one slighty fermented milk drink was close enough to another to work out just fine † Tonight I wanted to make some cornbread, and instead of the cup of milk the recipe called for, I used some kefir instead. The difference was subtle, but pretty good.
Invented last night in a fit of inspiration. 1 oz rye 1 oz lemon juice 1/2 oz St. Germaine 2 dashes orange bitters 3 maraschino cherries Seltzer Stir together the first four ingredients in a rocks glass. Add a large ice cube, fill the glass with seltzer and stir. Garnish with the cherries.
Some day I'm going to document how I write Salt Stack states to allow for several instances of a service to be written. But so I don't forget about it, this is a large setup that uses several techniques I'll find useful.
As part of my process to replace the power-hungry eight-year old server I have at home with a tiny Intel NUC, I'm slowly moving any real services off of it onto my colocated machine. The last real service I'm running at home is my backup machine, which handles both my AFS cell backups and my rsync-based machine backup scripts. Moving the backup server to colocation isn't difficult, but I need to find a place to stash the second, disaster-recovery copy of all of my backups.
I've been having a lot of fun with Go recently, and my usual first project when playing with a new language is to port remctl bindings to it. In doing that with Go, I ran across a problem that had me puzzled for a while until I finally figured it out. In the remctl C binding there's a call remctl_commandv(struct remctl *r, const struct iovec *iov, size_t count); e.g. you pass remctl_commandv an array of iovec pointers and a count for how long that array is.
Snow in Inwood
As many of you know, from July 2005 - September 2013 I made a zine called Haiku a Day. After 99 issues I stopped, wanting to stop while I was still going strong. Creatively, it's the second longest thing I've done in my life, and every month sending out the latest issue still gave me as much of a thrill as it did the first time I did it. It still tickles me that there are people out there who know me simply as "The Haiku Guy".
Sometimes you have a file that has a certain number of defined columns, and then some variable number of columns after that. Sadly, AWK doesn't have a nice way of specifying $N..., but this works well enough for me: awk '{print substr( $0, index($0, <N>))}' filename where you replace <N> with the column specifier (e.g. $11 or whatever).
Because CentOS doesn't include buildsys-macros-rhel for some reason, a few useful macros in RPM SPEC files aren't included, like dist and el5. To fix that: %define distribution %(/usr/lib/rpm/redhat/dist.sh --distnum) %if %{distribution} == 5 %define dist .el5 %define el5 1 %endif