Over three years ago I spent a long weekend building my very own, basic but functional webmentions implementation. When I switched the site to Hugo from my homegrown pile of static-blog-building scripts last year, I put rebuilding webmention support way, way on the back burner, and never got back around to it.

I really wasn’t fully geared up to make that system work with Hugo, so today with this writeup from Daniel Goldsmith I used the webmention endpoint from Pelle Wessman, to rebuild all of that functionality in a couple of hours!1


It should now be easy to post comments here via any system that will send webmentions, such as one’s own indieblog site, as well as via replies to entries that are syndicated to my micro.blog feed. This is cool!

  1. Looks like I have a couple of metadata/microformat adjustments to make so that my mentions appear correctly on the other side. Stand by. [return]

I’ve been using micro.blog now for a couple of weeks and finding that I really enjoy the way it provides a hub for both short status updates as well as pointers to longer writing. While not at all a direct analogue, It’s filling some of the feed created by the shutdown of Minimal Reader, which I had used for several years.

It’s full of people doing their own things. All this energy reminds me a lot of the early days of app.net as well as the time when tilde.club was really on fire: Tons of bubbling excitement over writing things, building things, sharing things, and meeting people with a common bent toward all those.1

There’s a distinct indieweb feel, right down to the bones of Micro.blog architecture meant to enable things like webmentions. This is very cool, so today I dusted off the parts of my brain that remember, vaguely, how those things work and tuned up my little piece of the indieweb, again.

As some others around the place are noting, I’m not quite to leaving Twitter yet, either. But I’m enthused by a platform that has a solid code of conduct and provides a lot of connective architecture for making new networks.

All this new connectivity is inspiring in a number of ways, so I’ll be trying to write more frequently2 as well as share bits and pieces of other things I’m working on.

  1. Not surprisingly, I’m running into some of the same people who populate/ed both of those places, and even caught sight of a couple folks from the TextDrive days. Something something early adopters? [return]
  2. Sharp observers will note the nearly three years of posts that fit on this single blog page; suggesting that previous such efforts have been … inconsistent. But! [return]

Hi. I’m trying microblogging, I guess. This should be syndicated over to my joint at micro.blog.

It’s an interesting experience to pass through most of a season in a new place — in this case, a temporary and somewhat unsettled place. We have been out of our house for two months, due first to a Christmas-time trip north, and, since New Year’s Eve, due to remodeling making it virtually impossible to live in our house.

After returning to town and expecting to find the house habitable, we spent one surprising and very, very bad New Year’s Eve paying an absolutely exorbitant rate for the last motel room in town: A filthy and despairing place where we woke early and left as soon as possible, settling finally in the place where I woke today. Since the first of January, we have lived in a small but clean room at a long-term stay hotel, two adults, a kindergartner, and a year-old dog in a one-room space with a tiny kitchenette.

We are ready to go home again, and as of today, it looks like home is ready for us, or just about. To be clear, there’s still a lot of work that needs to be completed, but the final milestones will mostly wait on the completion of our new countertops, which could be a few more weeks. So at this point, mot of the very dirty (so dirty) and disruptivve work is complete, so — back home we go! We won’t have a kitchen sink or dishwasher or stove for a while, still, but we will get by. I will have my fast internet, and my coffee machine, once again.

We figured out how to go about our lives more or less normally — gym, work, school, etc — albeit with a lot more driving and a lot more dog time. The pup has gone just about everywhere with one of us, and we are lucky enough to be able to work from home, so we have traded off spending work days with the dog in order to keep her from barking too much at the hotel. When we run errands or go out together, she goes, too.

We are all looking forward to having a little more private space once again. For one thing, this living arrangement has been very bad for work-life balance. We have both had way too many 5am conference calls, or early starts just to recover some time that we know would be claimed later by driving across town, dog walks, kindergertner time; all the things that can fit more seamlessly into life at “home” but that take more time when fit into the constraints of living somewhere else. That said, being in close proximity for so long is a good motivator to develop some discipline and focus: I can’t just go to the other room to read for a while, so I have to put on my headphones1 and get it done right there, right then. So life goes on, and there’s a lesson in that for us.

We found a few new routines, too: After picking up my son from school on cold afternoons, we often made cocoa for him and took iPads and laptops down to the hotel lobby, where he could sit by the fire with cocoa and Minecraft, and I could have a beer — Goose Island IPA, $2 all the time may be the best thing about this place — and catch up with work or play of my own.

In January we had our tenth greatest snowfall on record, and while we didn’t need to shovel out at the hotel (aside from clearing the cars), I had to make several slow cross-town trips to keep the house clear so that the crews could get to the place and work. From deep winter, we have gradually turned toward spring: the days have grown longer, light coming up to the sky earlier while I sit at Starbucks with a coffee some early morning. On Jan 1, we woke up to a few inches of snow; and today woke up to a skiff. That feels like a nice bookend, like we didn’t pass entirely out of winter in this liminal place, despite the feeling that spring is getting close.

We didn’t expect to spend our winter like this, but so it goes. I have been at times frustrated, exhausted, demoralized at the combination of living conditions, obstacles at work, and things just not being the way I like them to be.2 Yet each day I am one day older, whether I am in the place I want to be or not. I have tried to be very aware that it is my privelege to be able to chose how to live each of those days.

Looks like we will complete the move-back-in process in another day or so. It’s going to feel so good to make coffee in my own house (albeit in a bathroom, because we don’t yet have a) a sink or b) working electrical outlets in the kitchen).

  1. I have listened to so many podcasts and watched a ton of solo Netflix in the past couple of months, all with my super AirPods, which are basically always at hand, now. I listen while walking the dog on our circuit around the hotel complex, catching a few minutes at a time, so easily and effortlessly. Those suckers are worth every penny to me. [return]
  2. And, of course, while managing (with a great contractor) through a significant construction project at our house. [return]

A little over a year ago, in a fit of pique over the thought of re-learning how to program my obtuse thermostat when its batteries died (again), I replaced my thermostat with an Ecobee 3. It’s great, for all the reasons people say.1

That’s not what this post is about, though. The Ecobee web site offers a timeline that shows furnace activity, which I like to check out. But I don’t love logging in to Ecobee site and clicking through three screens to get, so I spent several hours learning how to use the Ecobee API to download the same data and plot it for myself.

In the above plot, the red/orange line is the inside temperature, and red is where the furnace is burning. The horizontal grey lines indicate the temperature set by the thermostat, and the blue line is the outdoor temperature. This is basically equivalent to the way ecobee presents this data in their control panel, with the exception that they just show a horizontal bar above the entire plot to show when the furnace is burning or fan is on. I prefer to have that integrated so I don’t have to scan up and down to track furnace time against temperature. And of course, I don’t have to log in and click through to get to my picture, because it’s sitting on my web server and refreshed every fifteen minutes (which is the data refresh interval from ecobee).

Usually you can see a normal cycle of warming up in the morning, then fluctuating around the set range as the outside temperature increases during the day, until cooling to a low temp threshold all night long. Here you can see where I inadvertently set the “away for now” setting and forgot to disable it, so the temp hovered right at 62ºF for a day, repeatedly warming and cooling around that range until I realized what was happening and switched it back to normal mode.

I think it’s all pretty cool.

You can do a ton more with the ecobee API, including set the temperature. I may play with that in the future: I’d like to have a quick command to, say, boost the temp by just two degrees for half an hour. Having quick access to a shortcut that would do that for me would be pretty cool.

  1. I know people love the Nest, but for me the Ecobee is superior: For one, it can be wired more flexibly than the Nest, allowing for full operation without “power siphoning,” even with a three-wire thermostat line (disclaimer: this requires jumping the fan and burner wires – which was quite fine at my place until I got around to running more wire). And it comes with a remote temperature/motion sensor for more comprehensive temperature monitoring, which, thanks to a recent firmware release, can also be hooked into HomeKit for motion sensing events. [return]

I think that with this post I have deployed the Hugo site to production.

RSS feed is redirected to the new file, so subscribers will see some duplicate/repeat entries, I think.

This is my first post to Hugo. So far, so good?

Running log of my work to get Hugo set up the way I want it:

  • Jan 15: Installed on Pair and on my MacBook locally. Made the first version of this post. (Required installing Go on the MacBook, as well as figuring out the environment variables to run Hugo.)
  • Jan 16: Wrote a quick ruby script based on a snippet from my homegrown static blog site, to migrate all my markdown entries to Hugo; this required reading their dates and titles and adding them as proper toml metadata to the Hugo file headers. It sure was a good decision to use a bunch of plain text files when I built my own engine.
  • Jan 17: Themes are kind of complex. I’m playing with the HPSTR theme. Figuring out how to work with it involves learning a little bit of how SASS works, and a whole lot of trial and error. This theme has a lot of components. I’m tinkering with color and some of the page’s components: To wit, today in a couple of hours I learned how to change the header and link colors and remove the ‘reading time estimate’ from the list page.
  • Jan 18: What now? I’d like to remove the hamburger menu. Also need to figure out a urg-ahoy-hoy Deployment Method. Though I’m also re-watching The Expanse while I sit in a bar, so this may go more slowly.
  • The great majority of all my content converted to the Hugo site works just fine as-is. There are two notable exceptions:
    • First, the link list-type posts that I wrote for my homegrown blog worked by having a link in the title/header. As-is, Hugo doesn’t render these. This might be fixable easily by adding | markdownify to the template where the title is rendered, as in the list and single templates for the theme.
    • Second, the images that I display using the lightview lightbox don’t display, because I don’t have the required style and script available.
      • (Jan 21) This took a while to get a handle on, mostly because I’m not very good at this, I wasn’t focused, and I might have had a drink or two. Figuring out Lightview involved learning how to deal with Hugo shortcodes and then doing a bunch of debugging. I ended up with a shortcode, basically a snippet that inserts the arguments I specify, into the code that I used to build for lightview. Additionally, I had to put the calls to lightview’s javascript and stylesheets, as well as to jquery, in my page templates. Of course, now I have to go and re-code in my markdown files, but I do have a good method going forward (and I don’t have all that many posts with the old lightview method, anyway).
      • (Jan 22) Done. This shortcode thing works great and I’m looking forward to experimenting with it for more uses.
  • Jan 22: Now I need to figure out an index/archive page.
  • Jan 24: It’s a snow day. I’m screwing around at home while the kiddo builds stuff in Minecraft. So I learned a little more about templates, worked on a replacement for the nav hamburger menu, and applied a little bit of my crappy design sensibility to the header.
    • Next on the improvements list: Cleaning up markdown links in my archive page, and maybe better link presentation on their individual pages.
  • Jan 26: Oh, right, need to do RSS and figure out if there’s a webmentions method to add.
  • Internal links are probably broken and need to be either fixed in the markdown source or redirected. Here’s the perl I came up with to replace relative and absolute links that used my previous convention.
    perl -i -pe 's/]\(\/2012(\S*)\.html/]\(\/post\/2012$1/g' *.md
    perl -i -pe 's/]\(http:\/\/prettygoodhat.com\/2017(\S*)\.html/]\(\/post\/2017$1/g' *.md 
    perl -i -pe 's/pics\//\/pics\//g' *.md
  • Probably should install some syntax highlighting. Then I think it’s about time to go live.
    • That was easy. Added pygmentsuseclasses = true to my config, and:
<section id="main">
    <h1 id="title">{{ .Title }}</h1>
    {{ range .Data.Pages }}
      {{ .Render "summary"}}
    {{ end }}

To make this work on my web server I needed to $ pip install --user pygments.

  • Prep for deployment by marking all posts as draft = false: perl -i -pe 's/draft \= true/draft \= false/g' *.md

Maybe I’ll do a little more writing here on the blog or elsewhere this year. I’ve meant to note lately that I’m really very much liking my AirPods.

Among the write-ups I’ve read around the internets, Steven Aquino’s review resonates strongly with my own thoughts, especially the idea that they’re just fun to use. There’s some real magic in the way they pair and in how nicely they tell my iPhone or Mac to pause when I remove one. For me, using them with Siri is a little hit or miss: I’ve found the right amount of pressure to double-tap with to activate it but not smash the thing into my ear, and can usually speak quietly to change the volume, pause, skip tracks or start a phone call.

When there is some background noise, however, Siri doesn’t always catch the command; likewise if I just mis-speak or if Siri just isn’t feeling cooperative, then the whole thing can hang up and leave me digging in my pocket for the phone. Right now, where it’s winter in the high country, this may mean stuffing a glove under my arm, wrapping the dog leash around my waist, and grumpily poking at my iPhone curmudgeonly. (A note about wearing these in winter: Right now I’m tucking them under a warm hat much of the time, so the fit is nice and snug. But in very cold weather, the metal antennae of the AirPods are quite efficient cold conductors. Chilly ears.)

The ease of use of the AirPods + case means that I basically am taking them everywhere with me. I never did that with wired ear buds. As a result, I find that I’m listening to more music and lots more podcasts than compared with a few weeks ago: A quick walk with the dog means five or ten minutes with a show or some tunes, and I’m really enjoying that.


In my use so far, the only place where the AirPods don’t feel like a rock star must-have is for voice calls. This is a big part of my use case, as I work from home quite a bit and spent a lot of time on the phone. AirPods do give me a lot of flexibility to walk around while on a call and make it quick and easy to get on the phone (no more untangling ear bud wires after fishing the things out of my bag). But: 1) Voice call battery time is not good: Compared to five hours of listen time, I get, max, two hours of phone time, even when I’m mostly on mute and only occasionally using the mic on my end. This leads to the awkward dance of putting in one AidPod while the other charges, then checking the charge every once in a while, and swapping ears to re-charge the active *Pod. Not optimal, but I get that it’s not the primary use case for most. And, 2) Not regularly, but frequently enough to be a distinct problem, the phone will stop sending the call to the AirPods and revert to phone audio. Resolving this is a matter of re-selecting AirPods as the audio destination, but it’s annoying and sort of worrying that this happens at all, much less once or maybe twice a day if I’m on the phone a lot or on a particularly long call.

So, overall I’m pleased as can be, really liking these tiny magic things and the way they fit into my daily life now. It’s fun to have a cool and somewhat delightful Apple experience these days.

Is this thing on?

Appears so. Boy, what a year, huh?

Seems I pretty much forgot how to post to this place.