Web developer, open source enthusiast, amateur photographer & Linux user. Blogs @ http://t.co/Xgj1dYR9wb (en) & http://t.co/m0VDEYHnHq (fi)
41 stories
1 follower

How to categorize objects

1 Share

How do you categorize software errors?

There are several possible axes we might think of:

  • Severity: e.g. notice, warning, error, fatal.
  • Module: what library or group of classes did the error come from?
  • Layer: database, framework, controller, model, view.

In Exceptional Ruby, I suggested a different approach for categorizing errors. Rather than thinking of different taxonomies that errors might fall into, think about how various types of errors are dealt with. For instance:

  • Inform the user that they tried to use the system in a way that is either not supported or not permitted.
  • Note that the system is in a state that was never planned for, inform the user of a fatal error, and log a problem report back to the developer.
  • Detect a predictable outage, and either retry automatically, or ask the user to manually retry later.

Then, once we have an idea of how different types of errors are handled and/or reported, we can work backwards from these distinctions in order to come up with a set of categories. Which we can then encode as base exception classes:

  • UserError
  • LogicError
  • TransientFailure

Consider a different domain: tasks in a TODO list. Again, there are a lot of ways that these could be categorized: by urgency, by sphere (work, family, personal), by importance.

The GTD system takes a novel tack: it says, “what properties are we most likely going to want to filter by?” The answers it comes up with are:

  • What tasks can I do where I am right now? (Office, kitchen, out running errands)
  • What tasks do I have time for right now?

Working backwards from these questions, it arrives at the idea of categorizing tasks by “context” and by time needed.

These two examples suggest a general pragmatic rule for categorizing objects: don’t worry about listing “natural” taxonomies. Instead, consider how you will most likely need to filter or sort the items.

In some cases, we might not yet know how we might want to filter or sort the objects. In that case, the rule suggests that we hold off on categorizing them at all.

Read the whole story
35 days ago
Oulu, Finland
Share this story

A Big Dumb Button

1 Share


My wife Sara and I used to have this running joke leading up to her birthday each year.  Each year I’d say “Honey!  What would you like for your birthday?”

and she would reply “I’d like a Hasselblad”.  Usually with a big smile on her face, in a wink-wink-nudge-nudge kind of way.

Then I’d say “Ha ha, no, seriously, what would you like?” and we’d both laugh and move on to more serious things.

Hasselblad.  The 500c/m.  Man.  That camera.  It’s like the Rolls Royce of cameras.  It would send shivers down our spines and we’d get all giggly any time we’d talk about it.

Hasselblad.  We both wanted one.  For me, the Hasselblad 500c/m is the perfect camera.  It’s this beautiful, perfect melding of function and art mixed together.  It really is a work of art; this little square box and can come all apart and attach to other things to make other types of cameras.  If he was a Transformer he’d be the classiest one.  He’d probably have a swirly moustache and wear a top hat and speak in an elegant accent.

Sometime around 2007-2008 I worked part-time a few days a week at our local camera shop.  Three generations owned this shop.  A downtown staple.  The owner knew everyone that walked in.  He chatted everybody up.  He knew everyones stories.

A few months before Sara’s birthday, this older gentleman came into the shop.  A small, white haired guy, slightly bent over.  He wore one of those blue trucker hats that had the yellow crests on the bill.  It said MARINES.

The owner of the camera store knew of the little ongoing joke that Sara and I had.  Those two were talking for quite a while and as they finished up their conversation, I got called over.

“Sid, this is John.”


“I told John about your little joke you have with Sara.  John actually works on Hasselblad cameras.”

“You do??” I asked him.

“I do” he said.  “I’m actually about to retire.  I’m going to be closing up my workshop.  I heard about your little run-on gag you have with your lady-friend.  Y’know, I have a bunch of Hasselblad parts at my workshop still.  Let me see if I can piece something together, and if I can, I’ll bring it back in here and we can talk.”

“Oh.  Totally.  That’s awesome.  Thank you.”

And John left the store.  And I figured that even if he did have something lying around, there is no way in hell I’d get my hands on one.  I’d priced them on Craigslist.  I’d followed them on eBay.  Even with the “Great Film Crash” since the advent of digital cameras, the Rolls Royce of cameras was still at a price I couldn’t reach.



Two days later, John comes walking back in with a plastic bag under his arm.  I got this tingle down my spine.

John pulls a 500c/m out of the bag.  He sets it down on the glass counter and he nods for me to  pick it up.  I paw at it.  It’s beautiful.  It’s all leather and silver streamlined trim.  It’s square and compact. And it’s calling to me.

“Sid.  Sid.  Look at me.  Looooook.”

I wind it, pull the darkslide, and press the shutter.  It makes that beautiful “CLOP-LOMP!” sound.  Oh, that sweet sweet sound.

I owned a Mamiya RB67 while in college.  That thing was a tank.  It was heavy and huge and it was near impossible for me to handhold and take a picture with it.  You could drop an RB from a very tall building and the impact below would make a crater in the ground.  But it would still work.  That camera was fantastic.

But this camera was totally different.  More elegant, refined.  Not cumbersome like a blaster, but refined like a lightsaber.  A more elegant weapon for a more elegant time.  This was the girl that everyone had a crush on.  That everyone wanted to take to the Prom.



This was the one true thing when it came to cameras.

I’m just about to start whispering sweet nothings into it’s viewfinder when John speaks up.  He sounds kinda frustrated and angry.  Not with me, but with himself:

“I was able to piece a kit together.  The leather is good.  The foam inside is clean.  I put a brighter focusing screen in there so you can see better.  It’s in good shape.  But the serial numbers on the body and the film back don’t match.  I hope that’s okay.”

I’m about to get down on my knees and propose marriage and he’s irritated with himself that the serial number don’t match.

“Uh. . .” was all I could say.

I paw at it some more, like a cat playing with a mouse.  All of my logic is gone.  All I can do is oggle the beautiful silver lines that move around the body of this camera.  I’m hypnotized.

“So” John begins and briefly snaps me out of my daydream.

“Here it is” I start thinking.  “The moment he tells me it’s like $1,200 bucks or more and I have to hand it back over to him”.  My brain starts to get depressed.

“I have to ask:  how much?” I say.  I’m a mix of excitement but I’m ever so slightly pulling away because I know I’m going to be ripped away from this beautiful mix of utilitarianism and sculpture.

“Welp, I think it’s great that you both are photographers.  And that you both met in art college.  And I cleaned this thing up just for her.  And since she loves photography and you love photography and she sounds like such a lovely lady, give me $200 and it’s yours.”

I was kind of in a daze.  I had prepared for him to say something close to a thousand.  My body was already instinctively starting to push the camera away from me when he tossed out the price.  It took a few seconds for it to catch up on me.

“Wait, what?”

“Two hundred.  And I might even have a prisim viewfinder back at the workshop.  If I do I’ll bring it by in the next few days.”


Nobody has ever seen me run faster out the door of the camera shop, down main street and to the closest ATM.  I ran like the Flash.  I ran for my wife.  I ran for that camera, and in my head, all the pictures I’d take and film I’d wind and times I’d just lovingly look over at it on a tri-pod.

I gave John the cash, and he again told me that if he found a prism for it, he’d bring it by in a few days and I could have it.

Suddenly I looked down and I owned the camera that was in my hand.  Wait.  What?


After John left, the owner of the camera store came up to me.  He asked me if I knew who John was.

“No.  He’s a really nice guy that just sold me a dream camera for a steal.” I said.

He told me to go home tonight, and look up the name John Kovacs on the internet.  I might get a better idea of who just left.

So I did.  And I wasn’t prepared for what I found.


John Kovacs.

John, it turns out, was one of the original group of technicians that was trained in Sweden many many years ago.  He had been working out of Nashua for decades under the name Hilton Command Exposures.  Back in the days before the Internet, he would be the guy who’s name you would see in the back of camera collector magazines.  He would be the guy that people would recommend to other Hasselblad owners when something went wrong with their camera.  You popped your Hassy in a box and sent it off to Hilton Command Exposures in Nashua NH, and,  weeks or months later,  you’d get your camera back fixed and in perfect working order.  He didn’t have a website.  He worked by word of mouth.

John is the patent holder for the workings that enable multiple exposures on cameras with a film-back mechanism.

And John Kovacs was one of the original group of technicians that worked on the NASA modification of the Hasselblad equipment for the Space Program.

Wait.  What?


Two days later, John came back into the camera store with a prism for me.  I immediately jumped into asking him questions about all this stuff that I found online.

“Yeah” he said with slight irritation “that’s me.”

“Space!  You worked on the cameras that went to the moon!!  That’s amazing!”

John got even more irritated.

“Space.” he dryly said. “Fucking Armstrong couldn’t operate the camera with his big stupid moon gloves on, so I had to create a big dumb button that he could bang to take the exposure.”

It was one of the most surrealistic moments I’ve ever been part of.  Listening to someone irritated about the part they played in documenting people landing on the moon.  There is a whole documentary film in his angry statement.

Shortly after he left.  A week later he retired from being a Hasselblad technician, closed up his shop, sold the rest of his stuff to someone who turned around and sold all of it in pieces on eBay.  The legacy of John Kovacs, and his participation in the history of cameras and photography came to an end.

John moved to Florida to live the remainder of his life happy and retired.  One of the things I regret in our all-too-brief 4 day friendship was not getting a picture of him.  I found a scan of a newspaper article that talked about Hilton Command Exposures back in the early 1990’s.  Sitting there in his workshop, tending to someone’s mail-order, bringing a Rolls Royce of cameras back to life for people all over the world.




Sara was over the moon when she opened her birthday present that year.  And, doubly over the moon when I told her the story that came with the camera.  That some of the most skilled hands refurbed this camera, and that those hands adjusted the camera’s that are still sitting up there on the moon.  And we got one of the very last cameras he worked on before he retired.

John died on January 18, 2013 in North Fort Myers, Florida where he retired. He was a WWII Veteran with the United States Marine Corps. He was formerly the proud owner of Hilton Command Exposures in Nashua.

That camera will never part from us.  It’s too important.  There is too much history behind it.  And one of the things that makes me sad is the history of photography, and of Hasselblad cameras, just became a little less because of John’s passing.  These individuals who are on the outskirts of the history of photography are starting to pass.  While we are obsessed with resolution and cramming megapixels into sensors and how to find the fast track to success, people like John who could turn a camera inside out and back again, are passing on.

I hope the information that was in John’s brain was passed on to somebody.  Or somebodies.  I hope he didn’t die with all the years of technical information and history without being able to pass all that on.  Because I can’t bear knowing that he did.

Share your stories.  Share the stories of those who pass those stories on to you.  Photography is much larger that just taking pictures of things and putting them in a book or on a website.  Share the stories, the conversations that come with them.  Preserve the past and the history, however small it might seem to be.

There is so much more I wish I knew about John.  But I’m glad that I get to share my story about him, however small it might be.

And every time I hear that CLOP-LOMP! coming out of my Hasselblad, I’m preserving John’s legacy and sharing who he was in a minuscule way.



Read the whole story
48 days ago
Oulu, Finland
Share this story

Paying customers, not paying Facebook, Google, or Twitter.

1 Share

Our new Basecamp Referral Program splits $100 between existing customers and new customers rather than putting it in the pocket of those that track your every move online.

Last year we experimented with running ads on Facebook, Google, and Twitter. All-in we spent 6 figures on the experiment. And then we stopped.

But what stopped us wasn’t the spend, it was the feel. Every dollar you spend is a vote, and we were casting hundreds of thousands of votes for big companies that are tracking people’s every step, every move, every curiosity, and every detail of their lives. Fuck that.

Yeah, they could bring us customers. But we don’t like the way they do it. We don’t want to be complicit in the how. No thank you, no vote.

So, armed with the dollars and the drive, how do we introduce Basecamp 3 to more people? Who can we vote for to help us do this? The answer became clear: Our customers.

Why give money to Facebook, Google, and Twitter when we can give it right back to our customers? They’re better advocates for Basecamp than any ad we can write. They’re not a platform, they’re people who know other people who can surely benefit from Basecamp just like they are.

We want to cast millions of votes with our customers. We want to pay customers for customers. So that’s what we’re going to do.

Introducing the Basecamp 3 Referrer Program.

It’s simple. Refer someone to Basecamp, and we’ll PayPal you $50 cash. And that person you referred will save $50 on their first month. We’re basically splitting $100 — half to you to say thanks for sending someone our way, and half to them to say welcome aboard!

You don’t need to apply to be part of the referral program. All you need is a Basecamp 3 login. If you’ve got one of those, you’re already on board.

Just log into your Basecamp 3 account and look in the bottom right corner of your Home screen. You’ll see something like this:

Click it. Then you’ll see something like this:

Send your link to anyone you want. Or click one of the social sharing buttons below to spread the word on your social networks.

If someone signs up, pays, and remains a customer for at least 75 days, we’ll PayPal you $50. Easy peasy.

Designed differently

We used to have a referrer/affiliate program way back when, but it was complicated, you had to apply to be part of it, etc. We didn’t want to do it that way again. And many referrer programs pay you in credit towards the product you’re using. Problem with that is that if you’re on someone else’s Basecamp account, then your referral would give them credit. You wouldn’t see any of that cash. Not good either.

So we designed this program to pay cash to the person who referred, not credit to the account they’re part of. Now everyone can make a little something when they tell other people about Basecamp.

One for One

Ideally, we’d love to see every customer we have bring us just one more customer a year. That would be an amazing outcome.

Everyone’s gotta know at least one person who’s struggling at another small business with messy email chains, out of date files, stuff slipping through the cracks, constant hold-ups waiting for other people to get you information, and work scattered all over the place. Someone you know is swamped, and the tools they’re using are partially to blame. Let’s help them!

Save yourself $50 and do some good

If you aren’t already a Basecamp 3 customer, but you’ve been considering it, now’s a great time to try. Use my referrer link and you’ll save $50 off your first month. And I’ll donate the $50 that I’d be getting to the Chicago Food Depository.

Paying customers, not paying Facebook, Google, or Twitter. was originally published in Signal v. Noise on Medium, where people are continuing the conversation by highlighting and responding to this story.

Read the whole story
94 days ago
Oulu, Finland
Share this story

Machine Learning

5 Comments and 15 Shares
The pile gets soaked with data and starts to get mushy over time, so it's technically recurrent.
Read the whole story
96 days ago
Oulu, Finland
Share this story
5 public comments
95 days ago
Actual illustration of how current machine learning (and AI systems) work
95 days ago
Всё так
96 days ago
96 days ago
This is actually exactly how Machine Learning works...
Lafayette, LA, USA
96 days ago
The pile gets soaked with data and starts to get mushy over time, so it's technically recurrent.

Rental Car

2 Comments and 15 Shares
Technically, both cars are haunted, but the murder ghosts can't stand listening to the broken GPS for more than a few minutes.
Read the whole story
97 days ago
Oulu, Finland
Share this story
2 public comments
96 days ago
reticulating splines
Bend, Oregon
98 days ago
Technically, both cars are haunted, but the murder ghosts can't stand listening to the broken GPS for more than a few minutes.

Drip campaigns — How we do them differently at Highrise

1 Share

I’m not a fan of most email I get. So I read very little of it :)

The worse offender is often drip campaigns from companies trying to keep me engaged with their product or service. You know the kind. You signup and then get a series of 6 emails someone wrote years ago that just keep coming to you.

They have some importance, right? There are things where you need some time to digest about the experience of working with a new tool or service that you don’t want to to be overloaded with immediately. You need to signup, get your bearings, learn the mobile app, learn how to do X. It just doesn’t make sense to clobber you over the head with all this at once. So some dripped education over the course of weeks or months is actually helpful.

The biggest problem with drip campaigns is they just feel robotic. There’s no human behind them even though they are often signed by the name of a founder or customer service person trying to “interact” with you. But you can tell. It’s robots all the way down.

So we’ve tried doing these a bit differently here at Highrise.

Change the Templates Every Day

This is the most important part of what we do. You can do this with most bulk email/drip campaign tools, but we use Highrise’s bulk email service to send out the majority of our mail to customers.

Just change the templates. Every. Day.

For example, I have a template that kicks off a series of email. It brings up a few different important aspects of getting started.

There’s a block early on:

That’s all about my day or weekend or family. This block was originally written a year ago, but this is what I delete and rewrite every single day. It takes minutes, often less than one, to mention something current and fresh.

Send replies to the highest priority queue

One of the worst mistakes people make with drip campaigns and other bulk mail efforts is that the replies go nowhere. The sender is “no-reply@wedontcare.com” or if it is a legitimate sender email, no one writes back.

It shouldn’t be this way.

All the drip/bulk mail I send is from my Highrise email address. Replies go directly to me. Often they are “thank you’s” and observations around the personalization of the email in the first place — see above if you skipped it :).

If I need help answering, I just forward them to the Support team at Highrise.

Now you might ask, “But Nate, your email inbox is a mess. 67k unread messages!? How can you reply to Highrise customers?”

Again, this is tool specific, but since I use Highrise, I use our auto-forwarding system and group inbox. I auto-forward my email to Highrise and have it whitelist just Highrise customers. That, combined with our group inbox, gives me a clean, prioritized inbox in Highrise that I keep empty.

But the big takeaway from this is you should use whatever tool gives you the workflow of making it a priority to handle replies to your drip campaigns or other bulk email.

Ask People to Chat

Most drip campaign email feels an awful lot like a lecture. “Here, you should try this.” “Hey again, you should do this.” “It’s been a few weeks, do this other thing.”

So I make sure to open up my email with a question:

Is there anything I can do?

I want to start a conversation here, not a lecture.

Give Them an Out

Emails are of course helpful, but sometimes it achieves the opposite effect.

You write your email trying to guide people through a ton of things they could possibly explore, but email is so direct. It’s not like the manual that comes with your car that you never bothered to read. A new email from you is probably at the top of their inbox. And then another comes.

Give people an out to realize this isn’t mandatory if it’s not helping.

I tell folks:

Also, Highrise is one of those products you can just use even if you lost the manual. But if you need any guidance there’s some resources below.

In other words, “Stop reading and throw this out, if this isn’t for you.”

Just Do It For Them

A lot of products have some kind of setup step. Maybe it’s an import of data. Maybe it’s setting up departments and filling out information for their users.

I’m always surprised more companies don’t just offer to do this for their customers. Your company’s employees, especially the support team, is faster at doing these steps than anyone, and once you get people past these things they are way more likely to stick with you than if they get stuck in setup.

So in our Welcome email we let new folks know:

Here’s some online help for doing an import with Highrise. Or if you’d like some help from us, reply to this email. If you have a spreadsheet of contacts, please attach the spreadsheet in your reply, and we’d be happy to help take care of that for you.

Of course you have to balance this with the size of the support team you have available. But in our case this saves more time than draining it because we don’t have to spend the extra time helping revert a bad import and redoing it if it didn’t work right the first time.

Those are just a few things we try and do differently. Some new things we’re fooling with are actually a customized email for each and every single person.

Alison here at Highrise created this effort and has shown us how awesome it is to send individual video emails to each customer (we use Bonjorno).

It requires the extra time, so it’s a balance to fit it in. But you can get an amazing amount of these out to customers with less effort than most people probably anticipate. It’s worth trying and adjusting if it isn’t scalable for your leads.

P.S. Please help spread this article by clicking the ❤ below.

You should follow my YouTube channel, where I share more about how history, psychology, and science can help us come up with better ideas and start businesses. And if you need a simple system to track leads, manage follow-ups, and send bulk email you should try Highrise.

Drip campaigns — How we do them differently at Highrise was originally published in Signal v. Noise on Medium, where people are continuing the conversation by highlighting and responding to this story.

Read the whole story
105 days ago
Oulu, Finland
Share this story
Next Page of Stories