Archive for May, 2010

What Photography and Programming have in Common

Monday, May 31st, 2010

Ladies and gentlemen, allow me to share with you a tale of two photographers.

My fiancée and I were featured in a piece for our local newspaper a couple of weeks ago. The columnist wanted an image to accompany her content, so a photographer was sent to my apartment to take a photo of me and my bride-to-be.

This went down about the same way I expected. Some nondescript dude with a camera walked in, looked around the room for all of about six seconds, arranged a semi-interesting shot involving a mirror, snapped a few pictures and left. This took around ten minutes.

A few days later, the writer for the aforementioned article called back and asked if she could send over another photographer. Apparently the shot the first guy had lined up was too similar to a shot the newspaper was running on another article, on the same day, in the same section, so they needed a new one.

The second photographer was Christopher Pike.

Christopher ran things a bit differently. After introducing himself, he spent a few minutes looking around my humble abode and the surrounding area. He then asked my fiancée and I what we thought of a few potential shots, and started taking pictures. A lot of pictures. We posed on our balcony, on a bench, near a wall, next to a fence, under a tree, and probably in other places that I’ve since forgotten about. Every time Christopher noticed something that might make for a cool photo, he asked if we wouldn’t mind posing for it. In total, this process took over an hour.

It’s important to note here that the first photographer and Christopher were both freelancers hired by the newspaper. They were probably both paid the same amount. But while the first guy spent ten minutes taking a picture he had decided upon in advance, Christopher spent about seven times that long experimenting and looking for the perfect shot.

What does this have to do with programming?

Just like photography, programming is a craft.

That first photographer, the one whose name I can’t remember, was just in it for the job. The editor wanted a cute photo of a cute couple, so our unremarkable photographer took one and took off.

This is how a lot of equally unremarkable coders look at programming. You need a function that converts X inputs into Y outputs? Sure. Let me whip up a quick algorithm that does that. Done. What’s next?

Christopher, on the other hand, was there to take great pictures. He was passionate. He approached photography as a craft. Yes, the output was a photo that he could sell to a newspaper, but believe me when I tell you that’s not why Christopher is a photographer.

This is how I look at coding (and hopefully how you do too). You need a function that converts X inputs into Y outputs? Ok, let me consider the context, ask a few questions, then create a solution. Functionally, it will be the same as Joe-first-photographer’s solution, but as a programmer that cares about his craft, I took the time to:

  • Verify that yes, a single function is the best solution.
  • Keep future maintenance and extensibility in mind.
  • Write clear, reusable code.
  • Add useful comments where necessary.
  • Refactor my function to be as simple as possible.
  • Change all my spaces to tabs to match the existing code-base.

Which photographer would you rather hire? Which programmer would you rather have on your team?

Make Web not War

Friday, May 28th, 2010

I spent yesterday in Montreal at Make Web not War. It was a really fun time, and I learned a lot of neat things and met some interesting people. I was tweeting about it a fair bit, as were many others, (#webnotwar was actually the top-trending topic in Canada for much of the day) but for the benefit of those of you that don’t follow me on Twitter, I thought I’d sum up the experiences I had while I was there.

The keynote was a good start.

Joel Perras gave a great opening speech that really set the tone for the day. There were a lot of thoughtful tidbits about how closed-source platforms and open-source platforms can interact with one another, but by far the most-quoted phrase from this introduction was the following:

Interoperability isn’t a feature. It’s a requirement.

This simple sentiment sums up exactly what Make Web not War is about. Different platforms must interact with one another to be part of the modern web.

Next I saw a crazy-looking WordPress development process.

Morten Rand-Hendriksen develops WordPress applications, but he does things a little more radically than most people. He uses Expression Web to make presentational changes through a GUI, rather than editing CSS himself, and the speed of results was pretty remarkable. This was a really thought-provoking presentation, and lucky for you, some of the content is available on Morten’s blog.

Morten also shared a bit of interesting WordPress knowledge. Did you know that WordPress 3 (which is currently in Beta 2) will support custom CMS-style menus? The interface for it is very slick; select what you want, and drag/drop to set the order (no more HTML-level changes). Secondly, he found a really neat hack for creating custom template pages per-category: simple add a page called categoryName-categoryId.php and it will be used by WordPress for that category’s landing page. Lots of potential here!

Then there was a really interesting panel about communities.

The panel set-up was very informal, and provided a great atmosphere that really made it feel like we, the audience, were simply listening in on a conversation between the panelists. It’s hard to describe what I liked so much about this particular panel, but from what I remember, the take-aways were something like this:

  • In the world of web development, the community is your best friend.
  • In order for the community to grow and remain healthy, people have to participate.
  • Waiting for the “big” meet-ups that happen every four or five months isn’t good enough.
  • All big cities have a variety of technologically-inclined groups that meet up much more often than that.
  • The meet-ups don’t even have to be techie; a karaoke group or patio night is just as productive.

So the message overall was pretty loud and clear: get out there and spend some time with others in the web development world, doing anything from talking about new technologies to trading bacon-themed recipes.

After that, there were some five-minute web-app demos.

The one in particular that caught my eye was the not-very-carefully-named Flockoo. This is a service that allows you to log in with your Twitter account and enter a location, and then returns a list of all the users you follow from that location. Very useful for conferences, for example.

My favourite panel of the day was actually about SEO.

Man, was I shocked. I went into this one thinking it would be a drag (I have a relatively low opinion of self-proclaimed SEO-experts) but it turned out to be absolutely full of practical, useful information. The speaker promised that the slides would eventually be available via SlideShare, and I’m anxious to give them a re-read. They filled in quite a few gaps in my SEO knowledge, and I’m sure they’ll help you too.

Next was another panel, this one about cloud computing.

I’m not much of a cloud-guy yet, so I didn’t really gain much from this session. The only thing I distinctly remember was one of the panelists describing the current state of your average cloud-based service as a “cloudsterfluck”, which is a term I’m sure I’ll re-use for months to come.

Then I was pretty disappointed with the HTML5 session.

This is a topic I know a lot about, and I was really looking forward to seeing some interesting demos or cool new techniques. Unfortunately the speaker spent most of his allocated time rambling about spec changes, something that I (a) could have learned about myself in about half that time, and (b) was already intimately familiar with.

He did mention HTML5 Doctor, though, which is a fantastic resource for all things HTML5, and I made a point to share this awesome HTML5 demo with the other attendees via Twitter, as it’s my favourite HTML5 application to date.

The CSS3/jQuery session wasn’t much better.

The material wasn’t quite so dry, and the presenter was much more animated, but there still wasn’t anything really new or interesting.

Finally, there were the Coding Competition finals.

This is where the very best of two-dozen-or-so web-apps were shown off by their developers and voted on by their peers (the other attendees). The criteria for these submissions was that they used PHP, open data, and/or Microsoft Azure.

The entry I voted for was TaxiCity, a really creative game that uses geographical data from Vancouver to overlay a 2-dimensional game world on top of the Bing maps for Vancouver where you, the cab driver, drive around the city picking up and dropping off fares. The execution was very well done, and the distributed team clearly worked very hard to put a lot of polish into their product — an A+ in my book.

The idea that won, however, was an application with a lot of potential called Find a Home. This is a real-estate-type tool that lists homes in the Edmonton area and ranks them by novel criteria such as family-friendliness (based on proximity to schools and parks) and safety (based on proximity to Fire and Police departments). It’s certainly a good use of open data and new technologies, but I felt it wasn’t quite “finished” yet, even by alpha standards.

All in all, Make Web not War was a great time.

The food was delicious and plentiful, the venue was gorgeous, and the staff were fantastic. I’ll definitely go back next year.

The Content-Sharing Problem

Monday, May 24th, 2010

The rise of ubiquitous social networks has lead to a choice I often have to make: When I find something cool online, where do I share that content?

In the pre-MySpace days, when social networks weren’t really a “thing”, the decision was easy because there were only a small handful of choices: you instant messaged or emailed it to a few close friends, or if you were “that guy”, you forwarded it to everyone you knew. Fast-forward to today. If I find a cool link, I have all kinds of options:

  • Tweet it.
  • Share it in Google Reader.
  • Share it on Facebook.
  • Link to it on Yammer.
  • Post it on LinkedIn.
  • Send someone a private message through any of the above services.
  • Blog about it.
  • etc.

Which do I choose? If I only post the link in one place, I’m only reaching a subset of my total audience. But if I post the link in several places, I’m guaranteed to spam a few users multiple times. This dilemma is what I call the content-sharing problem.

My solution so far kind of sucks.

What I do right now is painstakingly case-by-case. If it’s particularly techie, it goes to one of the more techie networks: generally for something short and easy to digest, that’s Twitter, and for something longer, Google Reader. The idea here is that I want to match the content I’m sharing with other pieces in my friends’ feeds that are about the same length.

If it’s not techie at all, I’ll usually involve Facebook. Facebook is the venue that has the least overlap with any other network, and since I can post it on a specific friend’s wall, I can target that audience even more deftly. Since there’s unlikely to be much overlap, I’ll often share this again on Twitter or Google Reader, especially since they’re public and more persistent.

If it’s something work-oriented, that’s where LinkedIn and Yammer become more attractive. Unfortunately, these areas tend to have a huge divide in that many of my Twitter/Google Reader followers are also connections on LinkedIn/Yammer, and many are not. This is the most problematic situation, because I either don’t reach several people I care about or show a similar subset of people the same link twice.

I could go on, but you get the idea — it’s a mess. It’s case-by-case, and it’s probably NP-complete. It’s killing me.

Is there a better way?

So far, I can’t think of one. Even convincing everyone I know to follow me on one monolithic feed isn’t ideal, because with so many diverse people in one venue, my signal-to-noise would be different and probably pretty weak for each individual contact.

I’m grasping at straws here. Is there a technological solution to this that I could be using? Are there content-sharing etiquette rules that I should be aware of? Am I simply trying to be in too many places at once?

What do you do? I’m dying to know.

iPads and Mondays

Friday, May 21st, 2010

Yes, I missed this Monday’s post. This is only the second time since my New Year’s resolution that I’ve missed a Monday! I just wanted to assure all of you that I’m fine, it was just an exceptionally busy 7-day period from last Thursday to this Wednesday, which did not allow for a post to be written. We will resume a normal weekly schedule in a few days.

Furthermore, I’ve written a lovely iPad interaction post on my company blog based on some thoughts from the parody I posted last Friday. Enjoy!

The Case for Hot Zones

Friday, May 14th, 2010

This post is a playful reply to Marco’s thoughts on the iPad. I’m not trying to say that he’s wrong (he brings up a perfectly valid usability issue), just that there are two sides to every coin.

Update: A more fleshed out version of my thoughts on this topic is available on my company blog.

If you’re reading this, there’s a better-than-average chance that you’ve heard about or maybe even played with an iPad. Have you tried to show it to someone extremely nontechnical, like that parent or grandparent who has never really used computers, or those friends who are always scared of technology because their computers always confuse them and cost them money?

You hand it to them, the screen auto-rotates, and they’re amazed for a second as they wonder what they just did.

With universal auto-rotation, the massive touch screen, and highly reactive apps, the iPad (and the iPhone, but it’s even cooler on the iPad) is always “hot” — touch anywhere on the screen, brush off a speck of dust, or change its orientation slightly (often unintentionally), and something happens. You found something! Maybe you discovered a feature you didn’t know about, maybe you noticed something you hadn’t originally seen, or maybe you’re simply in awe for a few seconds.

We’re not accustomed to this. You can pick up a TV remote, twirl it around, and run your finger over some buttons without learning anything. It has very small hot zones that you’re unlikely to accidentally discover.

When the hot zone is the entire device, and it’s a device you’re likely to be frequently picking up and handling, using it is actually kind of exciting: you never know when you’ll uncover unexpected behavior, so you’re more curious and exploratory. Every time it auto-rotates when you didn’t know if it would, it’s a minor joy: this device is a step ahead, it’s thinking for you, and you don’t need to be “good” at it.

One reason the Kindle seems like a less exciting ebook reader, and why the Kindle 2 is so much more boring than the first Kindle, is that it has almost no hot zones. Accidentally rotate it a bit in bed? Nothing happens. Grab the side and pick it up? Nothing happens. Accidentally rest your thumb on the button without deliberately pushing down on the inner edge? Nothing happens. Brush some dust off the screen? You guessed it: nothing happens.

When you want to take an action, it’s not fun or exciting — it’s just like every other piece of hardware from the past twenty-five years.

By minimizing hot zones, the result is a less-innovative product that provides little discoverability for people with low technical confidence. When everything is a hot zone, user excitement and experimentation increases.

Software Bundles, Independent Developers, and More!

Monday, May 10th, 2010

Over the weekend, I picked up the Humble Indie Bundle, a pay-what-you-want download for five six games created by independent developers. I love these bundles! I get a bunch of cool software, the developers get a lot of blog coverage/followers/supporters/fans (let’s just call it social capital), and a cut of the proceeds go to a pair of great causes (Child’s Play and the EFF). It’s win-win-win. And it shows one of my favourite things about software:

Software is different.

No other industry can really get away with something like this. Can you imagine if those had been board games instead of computer games? Think of the logistics involved! Impossible. But software can get away with it, because once software has been developed, it costs almost nothing to make copies of and distribute. Different. Which reminds me:

Independent developers are special.

You don’t really see major publishers do this. You could make a case for Valve, because they really have this online-distribution thing figured out, but you’d never see EA partner with Blizzard for a heavily-subsidized package including Dragon Age and Starcraft 2, let alone see them donate the majority of it to charity. Independent developers can do this because they don’t operate under the same rules as major publishers, and they’ve found a loophole in traditional business beliefs that allows them to do something awesome that benefits them, their users and anyone touched by the charities they support. Special.

Now bear with me for a second, and let’s try to think of a market that sells and distributes software with a lot of support for, or even a huge bias towards, independent developers. Wouldn’t that be an ideal platform for more of these bundles? (Don’t cheat and say Valve; I know they’re cool, but that’s praise for another day and we’ve already singled them out above).

The App Store.

Apple’s App Store for iPhone/iPod/iPad contains around 200 000 applications* and is very popular among independent developers (I couldn’t find numbers for this, but polling my iPhone I’m going to wager it’s certainly a majority). With that many applications, developers could really use some extra exposure, and the visibility Apple is able to provide through the App Store is surreal. How long would it take for most iProduct users to hear about a group of independent App Store developers packaging a few apps together for the sake of charity if it was promoted directly through the App Store and/or Apple’s marketing team? Days? It would be a sure-hit.

Users would get more great software in a convenient, affordable, socially-rewarding package. Developers would get more copies of their app out there, and a compounding amount of exposure (word of mouth is big on iProducts). Apple would get some much needed love from their developers and their users (if anyone is hurting for karma right now, it’s Apple). And just think of the fantastic interface Apple’s brilliant designers could craft by integrating bundle-purchasing straight into the App Store!

There is a huge opportunity here.

Am I the only one that sees this? Tell me I’m not crazy.

* They announced at the iPhone OS 4 event back in April that they were over 185 000, so if 200 000 hasn’t been reached yet it’s not far off.

How to Promote a Mall in the Year 2010

Monday, May 3rd, 2010

There’s a mall near my apartment called Billings Bridge. It’s a pretty nice place with a nice variety of stores, and up until about six months ago that’s all I would have had to say about it. But six months ago I started following their marketing director on Twitter, and since then I’ve come to the conclusion that Billings Bridge is a great case study for how to promote a mall in the year 2010. Here’s a look at some of the awesome things they’ve done since I started noticing them in December 2009:

Give-aways just in time for Christmas.

I found Billings Bridge on Twitter after reading the tenth or eleventh tweet about how they were giving away extra products they had lying around to their Facebook fans and Twitter followers. I know first-hand how awesome it was for them to do this, because I won an iPod Touch. On December 23rd. (That’s two days before Christmas.) So for the next three weeks, whenever anyone asked my girlfriend (now fiancée) what I got her for Christmas, she’d have this great story about how because Billings Bridge is super-generous and using modern communication channels that are easy to follow, they gave this to me so that I could give it to her.

There are probably about fifty other stories like this, plus all those tweets, and now at least one blog post. Word of mouth sells.

$50 for every 50 fans.

I don’t know when they started doing this or when they’re planning to stop, but every time Billings Bridge gets fifty new fans “likes” on Facebook, they give a $50 gift-certificate to one of their.. likers? (What do you call people that like things now? I miss fans.) This is brilliant because the sooner they get another fifty “likes”, the sooner they’ll give away another gift-certificate. This means that they have a steady stream of excited new mall-enthusiasts, in a very powerful social networking environment, constantly trying to get their friends and acquaintances to pay attention to that mall that gives stuff away. Motivate people to say something nice in a conduit for viral messages, and you’re going to get a lot of attention for your brand. Textbook smart marketing.

Sex and the City month.

Lately I’ve been seeing a lot of tweets about various fun things Billings Bridge is doing related to that new Sex and the City movie that’s coming out soon — things like that trip-for-four to NYC that they’re raffling off at the end of May. This is a fantastic topic to promote around, because it’s a movie that glorifies shopping. It allows them to catch interest through the popularity of a trendy, upcoming film, and convert on that interest because the film is about shopping. People that like to shop probably like the movie, so bringing them into the mall is obviously a good idea. Simple. Genius.

This is how every mall should run promotions. I’m sick of billboards and radio advertisements — I ignore them. If you want my interest, meet me halfway and spend time where I spend time. Give me incentives to pay attention to you, and better yet, incentives for me to get other people to pay attention as well. Try new things with new tools, and create a feedback loop so that I can tell you what works and what doesn’t. It’s working for Billings Bridge.


Oh, and did I mention that they’re giving away an iPad when they hit 2010 “likes” on Facebook? Because they’re about halfway there, and if you could “like” them too, and then tell a few friends, that would get us both a bit closer…