Fireworks 2018

I made a second attempt at shooting fireworks this year. I forgot my remote shutter release, and so had to trigger the camera from my iPhone. That works OK, but there’s enough lag that it’s not ideal. They still turned out pretty well.

Fireworks 2018
Fireworks 2018
Fireworks 2018

Scenes From a Farm

A friend asked me to take some pictures of the farm that had been in their family for generations, before some of the items were sold.

This barn has stood for over 100 years. Alas, it’s unstable and due to be torn down. The wood, however, is being salvaged.

This barn has stood for over 100 years. Alas, it’s unstable and due to be torn down. The wood, however, is being salvaged.

This convertible has been sitting idle for too many years.

This convertible has been sitting idle for too many years.

It’s been in a shed the whole time, so the paint is quite well preserved. Unfortunately the interior and the convertible top were in much worse shape.

It’s been in a shed the whole time, so the paint is quite well preserved. Unfortunately the interior and the convertible top were in much worse shape.

Another old car, this one slightly newer. Unfortunately it’s been exposed to the elements for a long time and the outside was in pretty bad shape.

Another old car, this one slightly newer. Unfortunately it’s been exposed to the elements for a long time and the outside was in pretty bad shape.

Quite a few old farm implements lying around. I have no idea the age of these, but I’m guessing nearly as old as the farm.

Quite a few old farm implements lying around. I have no idea the age of these, but I’m guessing nearly as old as the farm.

Breaking the Cycle

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).

Cyclemeter for iOS: A Great App for Cyclists (and Runners Too)

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.

Enter Cyclemeter

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 mostly-horizontal plane.

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.

How to Use Prismatic to Discover the News You Care About

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 (written in Clojure), 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 you think.

How to Make the Best Cup of Coffee at Home

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: Aeropress. 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 an Americano.

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 Aeropress.

To get an even better idea of how it works, check out this short video:

Cool Tool: If This Then That

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 scale.

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 logic, using JavaScript or some other language.

It’s early, but I see a lot of potential here. Go create an account and try it out yourself. What can you automate?

Steve Jobs

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 speech 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.

Backing Up Your Data With Fog

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.

Overview

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.

Writing Files

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)
  unless directory.files.head(name)
    directory.files.create(:key => name, :body => open(file))
  end
end

Here’s what this snippet does:

  1. Creates a connection to AWS. The syntax is basically the same for connecting to all of the cloud platforms, just the parameter names are changed.

  2. 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.

  3. 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).

Deleting files

      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
          file.destroy
        end
      end

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.

Handling Incoming Email With Your Web Application

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.

CloudMailIn

Still in beta (and free while it is), this looks robust. It’s also available as a Heroku addon, if that’s how you roll.

(A tip of the hat to @peterc for pointing me to this one)

APInbox

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

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.