Skip to main content

Pretty Good Hat

Fixing Syncing

For some time now I have used mover.io to:

  • Copy markdown posts from Dropbox to my web server where my static blog engine parses and publishes them
  • Sync the slogger-generated entries and photos from that same web server up to Dropbox, where they are integrated into my Day One journal.
  • Occasional other file transfers

Previous posts about this: using mover & mover and slogger.1


Mover is positioned to provide this service at scale, and while I’m not enterprise power user, the tool was very useful for me. And, hacking with its API was itself a fun project. So I was surprised to learn, when my daily sync jobs appeared to be failing, that the Mover API was no longer supported and had been unsupported for a year!

Well, it was good while it lasted. Fortunately, the guys at Mover were nice about it and pointed me to a new tool, Kloudless. Because Kloudless returns similarly structured JSON in response to API requests, it didn’t take too long to modify my existing code to get up and running with Kloudless. So far, it’s working great: Kloudless seems to be faster than Mover, the API is quite nice, and it’s built for what I’m doing — API-based file transfers, rather than offering the API as a sort of side feature.

The biggest obstacle to getting up and running was needing to figure out how to handle the paging of returned results; unlike Mover, Kloudless returns only up to 1,000 items at a time, and my Day One folder has more entries than this. This is entirely sensible, of course, but it took me some time to lock in on a solution. After that it was a matter of cleaning up a little and updating my Editorial workflow to copy a file over and rebuild, and I’m back in action on both my laptop and mobile devices.

Everything should be shiny once again! Thanks, Kloudless.


  1. Here’s another great use of a webmentions implementation: Low-overhead lists of related posts, simply by linking them from another post and running the webmention hook. ↩︎

Tuning up my Little Piece of the Indieweb

I’ve thought a couple of times about ways to connect this lonely personal site to the broader world. I have plenty of outgoing links, but little way to know if my posts actually connect with people on the other end, save for the occasional referrer link. Once or twice I started drafting a very small commenting system (one of which used the App.net API and would have stored comments in that system), but my energy waned with my enthusiasm for actally doing something like managing comments.

So I’m really intrigued by the notion of POSSE publishing, which I encountered via Jeremy Keith’s Adactio. The core idea, briefly, is about owning the stuff you put online — which resonates with one of my original motivations for putting up this site — and the community around it has developed and assembled a bunch of resources to implement this goal.

What does this mean for interaction? Among other things, what we think of as “comments” begin their life by being published at the writer’s own site, through the implementation of webmentions, where the target site builds its own mechanism for interpreting and syndicating those comments. The publishers going full-on with this method are using it to syndicate to platforms like Twitter or Flickr, too, all with the goal of initiating everything they put “out there” from within their own tools and sites. Needless to say, this is pretty cool, and it’s an opportunity for me to tinker with Pretty Good Hat, too.

So How Does This Work?

There are two core elements to building this: Sending outbound webmentions, and handling incoming webmentions. I’m going to try taking on each of these in pairs of phases: Phase One is most minimal, and Phase Two will try to be a little more sophisticated and integrated. Each step will need to work within the constraints of my little existing blog engine, and it all leans heavily on the writeup and work done by Jeremy.

Constraint one is that I don’t want to get too deep into the guts of the existing build system for my static blog. This means that building a lot of microformats support into my own posts will have to wait. I’ll have to work any microformats support into my own writing through specifiers to the kramdown processor and minimal modifications to the ruby code that actually builds the site.

Constraint two has to do with the fact that this is basically a static site, and I like it that way. But being a good indieweb citizen requires reciprocity: I don’t want to just be a publisher of my own stuff, and need a way to respond to the generosity of others who may link to me. The “live” appearance of links that may ping my content via a webmention poses some design difficulties.

What I’ve Got So Far

What I have going for me is that this joint is built in a pretty stepwise fashion. The pieces are ruby, but they’re invoked sequentially in a shell script. Without modifying the core write-and-post mechanism, I can add a post-processing method to send webmention(s) using mention ruby client to send webmentions automatically to each URL in my own posts.1

So that’s sending webmentions. What about receiving them? Again, I’ll lean on Jeremy’s work and use his minimum viable webmention code. I start by simply receiving and logging the mentions, putting them into a sort of attachment file linked to each of my own posts.


One great benefit of building and joining these two elements of supporting webmentions is that I can build them in parallel and use one to test the other.


On the question of static versus dynamically displaying webmentions: The strongest way to respect my static site goal would be to receive mentions, store them, and periodically check for anything needing processing, and add any new mentions to the static site entry pages. But I decided on dynamic so I wouldn’t need to poll for updates or add more to the core build script. This means a small load when displaying pages, and I could change to a scheduled rebuild if this ever becomes a problem — but this is a very low-traffic site, so that’s unlikely. I also keep a single unified log file for webmentions that I could use to rebuild all mentions if desired or as I expand my sophistication of treating them. For example, right now I reach out to target URLs and retrieve only the p-name of the entry, if available.2

So where am I now? After several hours of tinkering over a couple of weekends I have a functional webmentions implementation. Mentions should be registerable against any post here at Pretty Good Hat, and will be displayed on the single-entry page for that post. My endpoint is discoverable, but like Jeremy I also include a link (again on the single-entry pages) to a submission form for manually sending a mention. I accomplished this in what I think is a reasonably effective way given the constraints I described above: I had to add a few formatting stubs in my build code to put minimal h-entry syntax into my entries, and it look a fair amount of trial and error to get that display the way I like it.

Presenting the mentions requires a jquery call, so it cheats the static site a bit, but I’m already including jquery for lightview, so I may as well re-use it.

I extend a huge thank you to Jeremy Keith, whose posts got me started on this. (This one in particular.) I’m also grateful to this microformats post by Barnaby Walters, from which I learned a bunch. This is obviously a thing in process, and I welcome and appreciate any comments and feedback.


  1. This client is great. It finds links within an h-entry, so it’s not working with anything your footer or header, and it looks to discover a webmention endpoint at your target site. ↩︎

  2. The h-entry microformat allows me to syndicate a lot more than this; I’d be really interested in learning if there’s a community best practice for what to syndicate. My instinct isn’t to replicate the content of a mention, rather to pull just the name and link. ↩︎

Microsoft.com in 1994

It’s approximately the twentieth anniversary of the Microsoft “home page”, as we called these things at the time,1 and a team has recreated that original site after some digital spelunking. One of the fascinating parts of the story is that there’s no solid record of exactly when the site was launched or what circa-1993/1994 web technologies were used.

There’s a not-at-all secret easter egg tucked into the code:

<HTML>
  <TITLE>Welcome to Microsoft</TITLE>
  <!-- To read more about the re-creation of the 1994 Microsoft.com homepage, see readme.html -->
  <BODY BGCOLOR="#C1C1C1">
    <H1>Welcome to Microsoft's World Wide Web Server!</H1>
    <H2>Where do you want to go today?</H2>
    <P>If your browser doesn't support images, we have a <A HREF="1994-links.html">text</A> menu as well.</P>

And the linked readme.html describes the effort, including details about the pre-client-side image map, and a cool personal note from one of the developers: “It’s a big story with many turns and it makes you thankful for all the people (and companies) who have sought to make the web great.”


  1. OMG, that means I’ve been making my own tiny web pages for twenty years. ↩︎

Posts I Did Not Write After All

A good desk-clearing is in order, as is evident by the volume of drafts I have begun to accumulate. Here in no particular order is a partial inventory of unfinished thoughts, notes and un-realized blog fodder. Free ideas all around.

There was one about going on vacation with my entire digital world so one can stay up to date with RSS feeds, Twitter and the Facebook while sitting in the reeds next to the river. My road trip media entourage includes an iPad loaded with media and games to help a four-year-old get through a ten-hour road trip, the trusty MacBook Pro (here primarily as a photo download location, since I take lots of photos while on any trip); and the adult iPad1 loaded with music, comics, books ambitiously scheduled to read, and games to play. As it turned out, with all this digitalia at hand, I spent a lot of time biking up a mountain and later sitting in the shade reading an honest-to-god book.2 I know.


A lot of talk in my media sphere lately is about women in tech, specifically gaming but as part of a broad current that has widened over the past few years as women respond to sexism at conferences, in hiring, and in every day interactions. Being a fallen academic, I naturally want to point some of this conversation to classic work like Rosabeth Moss Kanter’s Men and Women of the Corporation and the large body of writing on gendering in the professions (medical sociology, which I taught for a while, has a lot of this). The people responding to well-written and heartful posts about fear, sexism and misogyny with “everybody knows women don’t want to work in tech/choose to have babies/aren’t good at it anyway/asked for it” won’t care, but these bodies of work might help situate the authors’ experiences in a trajectory. While the tech industry didn’t invent this experience, it does seem to have polished it to a pretty fine sheen.


David Carr wrote recently on the overwhelming feast of prestige television

The growing intellectual currency of television has altered the cultural conversation in fundamental ways. Water cooler chatter is now a high-minded pursuit, not just a way to pass the time at work. The three-camera sitcom with a laugh track has been replaced by television shows that are much more like books — intricate narratives full of text, subtext and clues.

On the sidelines of the children’s soccer game, or at dinner with friends, you can set your watch on how long it takes before everyone finds a show in common. In the short span of five years, table talk has shifted, at least among the people I socialize with, from books and movies to television. The idiot box gained heft and intellectual credibility to the point where you seem dumb if you are not watching it.

About the same time, an episode of Pop Culture Happy Hour focused on nerds and nudity, with discussion of “nerds” becoming more acceptable as “enthusiasts” through sharing the things they (we) love.

There is a lot that is complementary about these two pieces, in the rising cultural currency of pursuits that have been marginalized and/or lowbrow. Pop Culture Happy Hour in particular is in position to bridge these realms (and continues to be one of the podcasts that I really look forward to). The cynical take on this is that it’s all marketing, that the kids who grew up on comics and video games can now buy them for themselves. But the one I prefer is that the kids whose interests were marginal — or marginalizing — are now in positions to make exactly the things that they love, and are able to share those things widely and sometimes (hey, because of that culture industry) even make money at it. Good for them [us]!


Should you find yourself migrating to a new MacBook, as I did recently (happily, not due to disaster or failure), don’t forget to copy over your private SSH keys. What am I doing tonight? Re-generating keypairs so that I can publish this very post through my bloggy-woggy machine. Speaking of which, Frankenstein’s ___.sh looks like a very cool static blog publishing project: “It is a nameless, horrible and recursive assemblage of bash, sed, cat, echo, date, mkdir etc…, has no option, no for, and uses almost no variable.” Neeeat.


  1. The adult iPad is differentiated from the child iPad, most generally, by the relatively small amount of yogurt crusted into its chamfered edges. ↩︎

  2. James S. A. Corey’s Caliban’s War, sequel to Leviathan Wakes. Great, fun, galaxy-scale space opera. ↩︎

Payne to Andreesen

Alex Payne writes a letter:

Investors, shrinking in number but growing in wealth and political influence, own the means of digital production. Everyone else is doing shift work and hoping they still have jobs tomorrow.

Overcast

Today — obligatory finallyOvercast hit the App Store, and all the guys are writing positive reviews.1

I have nothing wild to add; it’s nice: Overall UI refresh is fantastic as compared to my previous podcast app of choice, Instacast. For a while I’ve been dissatisfied with Instacast extremely modal separation between player controls, playlists, and editing subscriptions. On these scores I’m really happy with the feel of using Overcast. A few other things have made it a real pleasure to use, so far:

  • Effortless import from other podcast apps is brilliant and executed so well.
  • Miniplayer at the bottom is great, immediately improving on one of the things that was frustrating about listening in Instacast
  • Overcast resumes playing perfectly: If it cycles out of memory while I’m doing other things on the phone, opening up the app makes it perform much like Rdio does, with the miniplayer appearing at the bottom after a short delay so it’s easy to resume without having to re-find what I was listening to. Unlike Rdio, it even starts playing automatically in the car when bluetooth is active. I love this.
  • Continuous play mode combined with easy arranging of podcasts in a playlist: Cool.
  • Integration with web account for desktop use: Marco has said recently that he doesn’t like doing web apps anymore, and I suppose this barely qualifies as an actual web app; but he really gets web app infrastructure, and the backend support for Overcast works seamlessly and does what it’s supposed to — provide a web point of access to the things I want to listen to for those times I’m at my desk and don’t want to work through the iPhone. All it’s missing is a way to add a subscription (perhaps this is in v1.1), and meanwhile Huffduffer perfectly fits the bill for ad-hoc episode additions.
  • Sharing: Built-in sharing to Twitter and Instapaper, yes, thank you. Once I get something to one of those services, it’s easy to pick up downstream through IFTT. And if I want to get to a specific sharing bookmarklet in Safari, there’s no need to deal with a built-in web view for podcast sites — Just an open in Safari option that makes all those links very close at hand. If there were a Pinboard share option here my social links would be complete, I think.

I’ll have to explore the recommendations feature some more.2 So far, I’m just pleased and happy. I have a couple of long road trips over the next two weeks, and I’m looking forward to putting the app much more fully through its paces.


  1. See MacStories and Snell, for example. ↩︎

  2. I see my friend Joel is having some trouble sorting it out, so I’m probably already at a big disadvantage. ↩︎

Nethack Meditation

Nich Maragos, Procedural Life Labyrinth: 17 Views of NetHack:

I played NetHack yesterday, I played it today, I’ll play it tomorrow. There’s a better than even chance I’m playing it as you’re reading this. I do this despite having basically exhausted the challenge of the game. Sure, I still die a lot, but less out of inexperience and more out of impatience. I know what to expect from every monster and what to do to counter it.

So why not move on? If it’s not hard anymore, is there a point? I suspect NetHack has gone past something I do to challenge myself and become another one of my comfort zones. I look over at my unopened copy of Bravely Default, and think, “That seems like a lot of effort.” So I sit in the same chair, in the same room, playing the same game, day in and day out. It’s not a good look.

At Multiball: Player Two Start

I’ve been enjoying Steve Lubitz & Co’s Isometric podcast for several weeks now,1 and his vicarious company on App.net for a little longer than that. Player two Start is a sweet and nuanced story of his plan to introduce his daughter to his favorite classic games that gradually turns into discovering a new game to enjoy with her and that matches her abilities. Along the way Steve makes some nice observations about some elements of console gaming that hinder kids whose hands are still small and whose gaming started with touch screens of all things. These are things I’ve started to think about with my son, too, and I really love what Steve has put together here.

(Related and also recommended: Pop Culture Happy Hour’s making toddlers into nerds episode, which gave me a small truckload of great recommendations while being similarly sensitive to the way kids need to find their own things to geek out on.)


  1. A show recently asked to join the 5by5 network — congratulations! — and on which Steve claims to be merely the token male among a crew of sharp, all-star co-hosts. But such protestations should not be taken seriously, for the entire cast does a great show. ↩︎

Choosing Words

Use Simple Words

Vigorous writing is concise. A sentence should contain no unnecessary words, a paragraph no unnecessary sentences, for the same reason that a drawing should have no unnecessary lines and a machine no unnecessary parts. This requires not that the writer make all his sentences short, or that he avoid all detail and treat his subjects only in outline, but that every word tell.

Use Beautiful Words:

There’s an amazing thing that happens when you start using the right dictionary. Knowing that it’s there for you, you start looking up more words, including words you already know. And you develop an affection for even those, the plainest most everyday words, because you see them treated with the same respect awarded to the rare ones, the high-sounding ones.

Which is to say you get a feeling about English that Calvin once got with his pet tiger on a day of fresh-fallen snow: “It’s a magical world, Hobbes. Let’s go exploring!”