Once Upon a Time on the Internet
Once upon a time, I had a blog. This was in the days before social media, mostly. I’d occasionally write some longer things, but often times I’d just share links to things I found interesting. Sometimes I shared pictures. I even did a series of interviews at one point. It was never a terribly popular blog, but that wasn’t really the point. It was a creative outlet for me, a chance to work in a different medium - prose instead of code.
I read other people’s blogs as well, which were often the source of the things I found interesting. First with Bloglines, then Google Reader, I followed hundreds of like-minded people and read the things they wrote. It was a simpler time.
Social Media and the Demise of the Blog
Along came Twitter, which was the first social media network I joined, though it was far from the first. It was new and exciting. I enjoyed following people that were interested in the same sorts of things that I was. Twitter at the time had earned a reputation for being banal - mostly people talking about what they were eating for lunch - but nerd twitter wasn’t like that at all. It was a continuous stream of people sharing things they found interesting or posting links to what they’d done. Sometimes it was discussions between people on an interesting topic, discussions that were a lot harder to have in other mediums such as blogs.
Twitter made it trivial to share links and small snippets of daily life. Inevitably, the arrival of new content on my blog slowed. A little at first, but shortly it became a trickle before it stopped altogether. More social media arrived: Facebook made it easy to share things with friends and family, Instagram made sharing photos fun. There was almost no reason to use a blog anymore. I wasn’t alone, a lot of the blogs I read at the time are no more. The people aren’t gone, they’re just posting their thoughts elsewhere.
And Now Here We Are
Fast forward a few years (ok, it’s more than a dozen since this story began). I still use Facebook and Twitter, but noticeably less than I once did. I’ve come to see social media as the junk food of consumption. It tastes good at the time but leaves you feeling unsatisfied. There are still good things there, but they’re increasingly harder to find and you have to wade through a lot of garbage to find them.
I’ve also been missing my creative outlet. I had once enjoyed writing longer pieces, explaining how I’d solved a problem, reviewing a book I’d read, and introducing people to something I’d discovered. That wasn’t really possible in 140 or even 280 characters, not in any meaningful way. I’d also taken up photography as a hobby, and while Instagram and Facebook are fine for sharing that sort of thing, neither is a great forum for it.
Ultimately, I want a digital place to call home, where I control (and own) the content and how it’s presented.
A look around the internet shows I’m not alone. Cal Newport, an author I enjoy who is decidedly anti-social media, has been making the case for blogs. Jeremy Keith is as well, and others too numerous to mention. Countless others never lost the habit and didn’t succumb to the siren call of communicating to the world exclusively in bite-size content.
A Phoenix Rises From the Ashes
So I built a new website. The technical details about what it is and how I built it are a story for another post, but now that it’s up and running this will be the place where I post most things. Links/photos/longer posts will be here, and then I’ll share them on social media. I want to own my own writing, for better or for worse, and there’s really no other way to do that other than your own website at your own domain.
The new blog and this very blog post were actually started a couple of years ago, but that’s how side projects go. This was never a top-of-mind project, but something I’d tinker with from time to time. Life’s a lot busier than it was a dozen years ago, and my attention span isn’t what it used to be (whether social media is partially to blame for that is a topic for another day). But no matter, it’s done now.
This is definitely a work in progress. I brought over most of the content from the earlier versions of this site, but not all of it. Some of that content has been reviewed and revised to correct typos, formatting issues, and dead links, but that will take a while and so if you spend any time in the archives here you’re likely to find all of those things. If you do, feel free to let me know (via Twitter, I suppose, or Github if that’s more your thing.
Cheers to the new year, and to new (old) things.
One of the recurring themes in my quest to be organized is that of todo list staleness. Inevitably, the cycle looks like this:
I sit down, and in a burst of creative energy I create a beautifully crafted, perfectly organized todo list. It’s a thing to behold. Everything is broken down into nice orderly projects, each with a clearly identified next action. There are contexts assigned to everything: this one is an errand, this one needs to be done online, this one needs to be done in the kitchen. It is, without a doubt, the epitome of organization. And this time, it’s going to stick. I’m going to review it daily, weekly, monthly to make sure that everything is current. This todo list will give me productivity superpowers.
This generally lasts less than a week.
Fairly quickly, I stop reviewing the todo list. For reasons unknown, I’ve never been able to develop the habit of reviewing my lists on a daily basis. Once I stop reviewing the list, I stop putting things into it consistently. Often, I will write them down on paper (or in a text file, or perhaps in Evernote), and then do them without ever entering them into whatever tool I’m using. Once this happens, I end up using the simpler tool as my whole todo list. I stop organizing things in projects, I just write things down, and then do them.
The next stop on this train is that I stop reviewing things weekly. This inevitably creates a bit of anxiety. I know that there are things in there that I should be doing, but I’m not. I’m focused on the things on my little todo list. It’s a paradox, because on the one hand I feel productive checking things off of my little list. On the other hand, I know that this means I’m not making the best use of my time. It means that my todo list is skewed towards the most recent things that I’ve put on it, rather than things on the larger list that might have more strategic value. To borrow a phrase from Stephen Covey, it’s the urgent, not the important.
In the end, the list atrophies. It’s not updated anymore, and starts to resemble a decaying building that’s been left to sit for decades. It’s a mix of things that have already been completed but never checked off, projects that are long-past relavant but still sitting on the list, and poorly worded tasks, the context of which have long been forgotten. It’s Exhibit A in the argument for the Broken Windows Theory. I could go through and get everything up to date again, but I don’t. Mostly, I suspect, it’s just too overwhelming. There’s lots of stuff there and my eyes just glaze over when I look at it.
Inevitably, in a fit of productive frustration, the cycle begins again. Sometimes it’s a restart with the same tool, purging the old and busted, and replacing it with the new hotness. Quite frequently, however, it’s with a new tool altogether (I think I’m on my sixth or seventh system by now).
In the most recent cycle, I switched tools again. This time from Evernote (which is an awesome notetaking tool, but a very poor todo list manager, at least for people with more than a handful of things going on) to Omnifocus. I’ve watched Omnifocus for years and always viewed it with quite a bit of interest. I’m a GTD advocate (even if I frequently fall off the wagon) and it was designed from the ground up to work well with GTD. It’s got great mobile apps, and a top notch desktop experience as well. The reason I hadn’t used it before now is that I spend a good portion of my day using Windows. Not by choice, mind you, but it pays the bills. Without a solid cross platform experience, I didn’t really think I could be productive. But now that I work from home, and have easy and constant access to not only my iOS devices, but my Mac as well, it becomes a little more practical. So I plunked down my cash on the counter and bought into the entire ecosystem.
So far, Omnifocus has been great. But predictably, there are signs of the cycle repeating. I’ve gone days or weeks without even looking at it. I’ve got a small, hand-written list on an index card (the amazing Frictionless Capture Cards). There are things in Omnifocus that are certainly out of date, and there are projects that I’m working on that aren’t in there at all. The first window is shattered.
There’s hope though. Omnifocus has one thing that I have yet to see anywhere else, which is a review mode. It exists in the desktop app, but it really shines in the iPad application. It works like this: you tap Review, and Omnifocus takes you through every single project in your list, and presents it to you one at a time. You can look it over, check things off that have been completed, and add things that might be needed. Then you mark it as reviewed, and Omnifocus gives you the next item. It’s brilliant. You only see one project at a time, so it’s much less overwhelming (at least to me). Once I’m done with the review, everything is current and I feel much more relaxed. It doesn’t matter how long it’s been since the last review, in less than an hour I can be completely current.
So after decades of using tools that never stuck for long, I feel like I’ve finally found the one that works the way my brain does. And while it’s not perfect, it suits me well.
The cycle is broken (for now).
I try to ride my bike
most mornings, assuming it’s not pouring down rain. It’s the same
route most days, but it occured to me
a few weeks ago that I really had no idea how far, or fast, I was
riding. Being the nerd that I am, I decided to find a technology
solution to this problem.
Dedicated bike computers and GPS devices have existed for some years
now, but like most everyone else these days, I’ve got an iPhone with a
GPS built right in. A little searching led me to a number of apps that
did what I wanted, and after reading some reviews, I settled on
Cyclemeter. The name is actually a bit of a
misnomer, since the app will also work for walking, runnig, skiing, or
pretty much any other activity that involves moving forward on a
How it Works
Once you’ve installed the app, it’s easy to get started. Open the app,
and click the giant green “Start” button. Then get moving. Cyclemeter
will plot your route as you go, and calculate your time, speed,
distance, elevation and calories burned (if you provide your weight).
When you’re done, click “Stop”, and CycleMeter saves the information.
You can look back at previous days on the calendar.
Cyclemeter has a slew of other features, like sharing via Facebook,
Twitter or Daily Mile, competing against yourself or someone else, and a
bunch of nice ways to visualize your results. You can also export all of
the data, so you’re not locked in if you want to move to something else,
or just want to play with the numbers yourself. All of your data can be
backed up to iCloud as well, so you won’t lose it if you run into a tree
and shatter your iPhone.
You Need This
At $4.99 Cyclemeter is quite a value when you consider what it
replaces. If you bike or run, I’d highly recommend it. You can buy it on
the App Store.
As the title of my blog implies, I’m a curious person. I like learning,
and I’m addicted to keeping up on the latest news about things I’m
interested in: programming, design, and the like. Sometimes I find it
hard to keep up with it all. About a month ago, I discovered
Prismatic, and it’s changed how I read the
web by making it easier to find the news that I care about.
Prismatic scans all of the links that come across Twitter (that’s a lot
of links), and categorizes them using some fairly sophisticated software
and then matches those links to you based on who you follow and what you
tweet about. It sifts through all of Twitter to find the stuff that YOU
care about. That’s powerful.
Getting started with Prismatic is easy. Sign in and link it to your
Twitter accounts and it will present you with a list of articles that
you will like, based on your Twitter activity. You can also tell
Prismatic what you’re interested in, by adding, well, interests. They
seem to have just about everything, so whatever you’re looking for is
likely to be there.
Prismatic gives you the stuff you care about presented in a single
“river of news” format - as you get to the end of the page, it loads
more articles for you. They pull out a little it of the article to give
you an idea of what it’s about, and show you a sampling of what people
on Twitter are saying about it. Each article that you see has a couple
of controls on it that let you tell Prismatic what you like and dislike,
which will adjust what it shows you based on that feedback. In theory,
at least, it will learn over time what you want to see and show you more
of what you like, and less of what you don’t.
I’ve been using Prismatic for a month now, and I’m completely addicted.
It’s a great way to find news about the things you’re interested in, has
some great features, and there’s certainly more to come (an iOS app is
in the works according to their blog). Try it out and let me know what
I am a huge fan of coffee and over the years I have tried a lot of
different means of preparing it. I currently own a french press, a drip
maker, and a stovetop espresso pot. All of these make good coffee, with
each having its own set of pros and cons. Last year, however, I
discovered the best method for brewing coffee:
It makes delicious coffee, takes up almost no space in your kitchen, and
cleanup is easy.
The Aeropress works kind of like an espresso maker, though at a much
lower pressure. The coffee it produces is espresso strength. This means
you can drink it like an espresso or use it to create espresso-based
drinks like Cafe Au Lait or Capuccino. I add hot water to mine to make
Since getting the Aeropress, it’s been the only method I’ve used to brew
coffee. It’s replaced the drip machine in our kitchen. It takes up
almost no space, travels well, and produces consistently great coffee.
Perhaps the greatest feature is the one I haven’t mentioned yet: price.
It will set you back a little more than \$20, much lower than a decent
home espresso machine or even a drip coffee maker. It’s great for
traveling or camping. Any place you can make hot water, you can make
coffee with the Aeropress.
One caveat: you will need a coffee grinder, or a place to buy beans that
will grind them for you. Coffee ground for a drip coffee maker won’t
work (which rules out pretty much all pre-ground coffee you would get at
the store). You need grounds that are somewhere between espresso and
drip. You’re really going to want a conical burr grinder, similar to
this one: I suspect if you’ve read this far than you either have one or
are willing to buy one.
In summary: If you enjoy great coffee, you need an
To get an even better idea of how it works, check out this short video:
I tend to be a little skeptical of the new and shiny. There is often a
lot of hype about how life changing some new website or gizmo is going
to be. Sometimes, however, something comes along that does live up to
the hype. The latest one I’ve found is a rather nondescript site called
ifttt. The URL is strange, until you understand
that it stands for “If This Then That”. What the site does is allow you
to automate bits of your digital life by watching for events (the “if
this” portion), and then taking an action (the “then that” portion). It
lets you tie together the various sites and services that you use,
allowing you to do even more with them.
This warrants an example, perhaps.
Let’s say you take lots of pictures of your kids with Instagram. And
let’s say your mom (or grandmother) isn’t the most tech-savvy user. She
uses email, but doesn’t have a smartphone and doesn’t want one. She
doesn’t use Facebook or Twitter. Wouldn’t it be nice if you could
automatically email any pictures you post to Instagram to your mother so
that she doesn’t give you a guilt trip for never sending her pictures of
her grandkids (hypothetically speaking, of course. Any resemblance to my
own mother is purely coincidental). Ifttt can do that for you. What
about those receipts you get emailed to you every month that you need at
the end of the year for taxes? Wouldn’t it be nice if you could get
those sent to a specific folder in Evernote so that they’re all in one
place? Ifttt can do that for you. You know all those links that come
across your Twitter stream that you don’t take the time to read?
Wouldn’t it be cool if you could just favorite the tweet and have the
link in the tweet automagically added to your Instapaper account? Ifttt
can do that for you.
So, how does it work?
Ifttt is built on the idea of triggers, channels, tasks, and recipes.
Channels represent the hooks into the
websites you use. Gmail, Google Reader,Twitter, Facebook, Evernote,
Dropbox, Instagram, etc. If it’s a popular service, ifttt probably has a
channel for it. There are also general channels for things like RSS
feeds that aren’t tied to a specific service.
Triggers then are events that occur on these services. A picture is
taken on Instagram, a new email appears in your Gmail account, someone
new follows you on Twitter. Triggers allow you to specify when you want
to take action. They also frequently allow you to specify criteria. In
the case of Gmail, for example, you can specify that you only want to
take action if the email is from a specific person, or contains a
certain word in the subject line. If you’ve ever created filters in
Gmail or Outlook, it’s the same concept, but applied on a much larger
Tasks, like Triggers, are built on Channels. They allow you to perform
tasks in reaction to a trigger. Examples of tasks would be things like:
- Sending an email
- Creating a new note in Evernote
- Sending a tweet
- Send an SMS message
Tasks let you use data from the triggers (ie the subject line in an
email) in your task. So you could, for example, use the subject of an
email to populate the subject of your note in Evernote.
Recipes are pre-made combinations of the
other items, created either by the team at ifttt, by other users, or
yourself. There are a lot of them, and chances are you will find a lot
of them that you can put to use immediately. Here are a few that I’m
either using myself or found interesting:
You get the idea.
I’ve only been using this service for a couple of months, but I’ve
already discovered a lot of useful things I can automate with it.
Posting things to Twitter for me, taking receipts that I get in email
and adding them to my Tax Folder in Evernote, etc. This saves me time
and makes my life easier. What’s most exciting though is that there is
that this service is very young, and has a lot of potential. There are a
lot more channels, tasks, and triggers yet to be created. Perhaps one
day they will add the ability to do conditionals, or even more complex
It’s early, but I see a lot of potential here. Go create an account and
try it out yourself. What can you automate?
Like Marco Arment I’m
not qualified to eulogize Steve Jobs, but I owe a lot to him so I need
to say something.
My first computer was an Apple //c. 1985. I spent a lot of time on that
computer. A lot. Probably an unhealthy amount.
I was a nerdy kid to begin with, and I instantly fell in love with it. I
spent endless hours on that computer. Playing games, writing programs in
BASIC, and generally just exploring the new world that it opened up for
me. Those hours spent in front of the computer paid off. I went on,
years later, to write code professionally. It’s not an exaggeration to
say that owning that Apple //c shaped who I became.
I’ve admired Steve Jobs since I was old enough to know who he was. When
he founded NEXT, I desperately wanted one of those beautiful (and
expensive) systems. I’ve seen every movie Pixar has put out. I’ve been
inspired by his business sense, his design savvy, and his drive. He’s
accomplished more in his abbreviated lifetime than most people could
accomplish in ten. His Stanford commencement
stands as one of the most inspiring things I’ve heard.
My latest computer is a MacBook Air. I spend a lot of time on that
computer. A lot. Probably an unhealthy amount.
Godspeed, Steve Jobs.
Fog, in case you haven’t heard of it, is a fantastic
cloud computing library written in Ruby. It provides a unified interface
to several popular cloud computing platforms(including Amazon,
Rackspace, Linode, and others), making it easy to interact with them
from Ruby. It currently supports four types of cloud services: storage,
compute, DNS, and CDN. Fog has become very popular lately, and serves as
the backbone for Chef’s cloud computing functionality, which is how I
first became aware of it.
I recently used Fog to write a backup script in Ruby to automatically
send encrypted database backups from a database server running at
Rackspace to Amazon’s S3 storage service. Here’s how I did it.
My script runs as the second step in a process. The first step is a
shell script that calls pg_dump to dump a PostgreSQL database and then
encrypts the file using GnuPG, dropping them in a backup directory on
the database server.
My Fog-based script’s job is to make sure that all of the files in the
backup directory get moved to S3.
Fogsync (my script), looks at all of the files in that directory and
makes sure that they all exist in a bucket on S3. If they don’t, it
copies them up there. Additionally, it deletes old backups from S3. For
this customer, we keep backups for 14 days, so all backups older than
that get deleted.
Let’s look at how it works:
fog = Fog::Storage.new(
:provider => 'AWS',
:aws_access_key_id => MY_ACCESS_KEY,
:aws_secret_access_key => MY_SECRET
directory = fog.directories.get("MY_DIRECTORY")
files = Dir["/var/backup/*.gpg"]
for file in files do
name = File.basename(file)
directory.files.create(:key => name, :body => open(file))
Here’s what this snippet does:
Creates a connection to AWS. The syntax is basically the same for
connecting to all of the cloud platforms, just the parameter names are
Uses ‘head’ to check if the file exists and, optionally, get some
metadata about it (size, modify date, etc). Think of this as the cloud
equivalent to the unix stat command. You don’t want to use the ‘get’
command, as that will return the whole file, which would take a very
long time if the files are large cough*voice of experience*cough.
Creates the file in the given directory (“bucket” in S3 terms) if it
doesn’t exist already.
If you’ve used S3, you’ll notice that Fog uses slightly different terms
for things than S3 does. Because Fog works across a number of different
storage providers, it uses more general terms. While this might be
confusing at first if you’re familiar with a specific provider’s
nomenclature, but the tradeoff is that if you want to move from one
provider to another, the only thing you have to change is the code that
sets up the connection (the call to Fog::Storage.new() in this example).
oldest = Date.today - 14 (our date)
directory = fog.directories.get(MY_DIRECTORY)
files = directory.files
files.each do |f|
file_date = Date.parse(f.last_modified.to_s)
if file_date < oldest
This is fairly straightforward as well. Get all the files in the
directory and check their age, deleting the ones that are older than we
want to keep.
So that, in a nutshell, is how to use Fog. This is a simplified example
of course, in my production code the parameters are all pulled from
configuration files, and the script emails a report of what it did, in
addition to having a lot more error handling.
If you do any scripting with cloud computing, you owe it to yourself to
check out Fog.
This morning I was looking for a way to handle incoming email in a web
application (similar to the way Highrise and Evernote let you email
things to a special email address and have them put into their system).
There are a number of ways to do this via procmail, or by using
something to connect to your mail server using POP or IMAP and reading
emails, but I was looking for a way to do this without having to host my
own email infrastructure. Ideally, I want something like
Twilio, that will receive the email and then do an
HTTP POST to the endpoint of my choosing.
Here’s what I found.
Still in beta (and free while it is), this looks robust. It’s also
available as a Heroku addon, if that’s how
(A tip of the hat to @peterc for pointing
me to this one)
Looks similar to CloudMailIn, though not in beta. There’s a free plan
for up to 100 emails a day, and then it goes up from there. Their site
was down when I first went to it this morning, which makes me a tad
nervous, but that may well be an isolated thing.
SendGrid is a heavy hitter in the email space, mostly doing outbound
delivery. They do however have a Parse API that seems to perform the
same function as the other two services. I’m not sure on the pricing
here, their basic plan is \$9.95 per month for 10,000 emails, but I’m
not sure if that includes incoming or not. UPDATE: I heard from
SendGrid. Their plans cover both incoming and outgoing, so for the in
the case of the \$9.95 plan, it could be a mix of both, up to 10,000
(thanks to Twilio’s @johnsheehan for
the pointer to SendGrid)
I haven’t used any of these yet, so I can’t make an endorsement of one
over the other, but I thought I’d post it here in case anyone else is
looking for this kind of provider. If you have experience with any of
these, please comment with your opinion.
Full-Ack: an Emacs interface to
Ack is a useful little app for searching
source code. If you ever use grep for finding things in your code,
switch to ack immediately - you won’t regret it. This is a handy front
end to ack for Emacs users.
Information architecture: A How
I’ve been learning about information
lately as it’s becoming increasingly important for my job. This is a
Hacker’s Guide To Tea
I need to drink more tea. This article taught me a lot I didn’t know
about tea and its benefits.
Tasty Treats for PostgreSQL
A bunch of useful tools if you work with PostgreSQL, from the guys at
HTML5Rocks - Introducing Web Sockets: Bringing Sockets to the
An introduction to Web Sockets, which let you do lots of cool real time
things with the web. One of many things I need to spend more time