My Development Environment

Last month I found something new on Facebook, it’s called Puzzle Master. I don’t know for certain, but Puzzle Master seems to be run by Facebook (the corporation) as a way to find new development talent.

When I first discovered Puzzle Master the running contest was:

To enter the contest, upload to our fan photo album, a screenshot of your desktop and development environment (including as many editors and tools as you can, and your desktop wallpaper) along with a short essay of 250 words or less explaining why and how you use it.

I don’t generally participate in this type of contest but I always find it interesting to see how other developers work. There were some cool prizes available and not many entrants so I decided to upload a screenshot of my desktop.

I was disappointed because the picture was scaled down so much that the apps were indistinguishable. So, I decided that it might be fun to do a few posts on my development environments.

First up… my physical setup!

My Desk
The picture is a link to flickr where I’ve attached some notes to the image.

  • MacPro (2 x 2.66GHz Dual-core Xeon) with 8 GB and ~2.5 TB
  • Two 24″ Dell monitors, both at 1920×1200
  • Mac OS X 10.5
  • VMWare Fusion running XP SP3

This is my home office but my work setup is similar. At work my MacPro is 2 x 2.8 GHz Quad-core. It has 12 GB memory and a single 500 GB disk. Maybe I’ll try to update this post later with a picture of my desk at work.

Here’s my desk at work!

My Desk at Work

Seriously? Microsoft defends return to DRM

When I read “Microsoft defends return to DRM” I honestly thought the article was going to be a parody. As far as I’m concerned there are only two possible outcomes when sticking DRM on music:

  1. Your customers understand DRM and are frustrated because they have to waste time getting around the “protection.”
  2. Your customers don’t understand DRM and are mad because their music doesn’t work the way it should.

But as far as I can tell the article is legit. The answers were given by Hugh Griffiths, Head of Mobile at Microsoft UK. In retrospect he probably wishes that he had referred the interviewer to someone in the PR department.

Most surprisingly, Mr. Griffiths makes absolutely no attempt to spin DRM as being beneficial or to try to justify its use. You might want to read the full article, these are just a few things that jumped out at me.

Why has Microsoft gone back to DRM when the vast majority of music services have ditched it?

It’s a first step.

Translation: We’ve always been extremely forthright about our intentions to gain monopoly power over every aspect of your digital life. This plays a small part in that larger initiative.

[Customers] certainly tell us that they like listening to music while they are out and about, on their mobile phones.

Translation: Everyone listens to music on iPods and we’re not making any money from that.

What is your message to consumers – why should I come to you instead of Amazon or iTunes? What do you offer that none of your competitors do?

There’s a whole bunch of people who are very loyal to MSN on the web…

Translation: Being a monopoly has provided us with a butt-load of customers, most of whom aren’t savvy enough to realize that there are options.

The fee for downloading tracks – £1.50 – is relatively high compared to 79p on iTunes and less than that on certain Amazon tracks. Why is that?

We’re constantly reviewing our pricing and if we feel this price point is incorrect, we’ll look to amend it.

Translation: I just told you, our customers are du-umb! I’m pretty sure that we’re going to raise the price to £3.00 after the first couple of weeks. We’ll just explain that we need to charge more to cover the cost of… something. Our customers genuinely appreciate the opportunity to pay a premium.

If I buy these songs on your service – and they’re locked to my phone – what happens when I upgrade my phone in six months’ time?

Well, I think you know the answer to that.

Translation: Yeah, we’re screwing our customers. So what? I buy all my music from Amazon so it really doesn’t affect me.

Seriously Microsoft? Seriously?

So, you want to work for a startup?

I recently came across an interesting quote:

The first thing that one needs to know when joining a startup is to understand how they work… make sure you understand what you are getting into. Here are some things to consider

  • startups are not for the faint hearted
  • startups are not a “get rich quick” scheme
  • startups require sacrifices from everyone including you the candidate (pay/effort/etc)
  • if you put your heart & soul and are part of the right team there is good chance you will succeed
  • success is not guaranteed, it has to be achieved!
  • remember its a journey, so if you are thinking about jumping ship often – dont even bother!
  • startups are a small community and if you play dirty the word WILL get around

Taazza newsroom, January 6, 2009

Some time ago I made an important discovery about myself: I love startups. I thrive in these fast paced environments. To me, participating in the design of a new product and creating the first iterations of the software is like a fix to a junkie. Working with new, cutting-edge technologies is exciting to me. It is exhilarating to interact with other intelligent people when we are all passionately fixated on achieving our mutual goal. It’s awesome!

All that said, working at a startup company is definitely not for everyone. Be prepared for a few ups and a whole lot of downs. Be prepared to bet against the odds. It’s fun to dream about a huge IPO but if that’s your sole focus…

I’m not going to deny that a large payout would be great. But in the meantime, I’m content to enjoy the adventure. You should checkout the full article.

What’s so great about git?

Over the last few days, I have been asked several times why I like git. Many explanations and detailed comparisons exist that discuss how git compares to other version control systems. I’m not going to try and duplicate any of that work. These are just some thoughts about features in git that allow me to work more productively.

I didn’t immediately grok git because it is fundamentally different from subversion. Subversion tracks the history of files whereas Git tracks the history of content. That difference may seem minor, but the shift brings a lot of flexibility. You can expect a small learning curve, but don’t give up! If git works as well for you as it does for me, you will not want to go back to subversion.

So, what are my favorite things about git?

  • Branching: Coming from a CVS/SVN background, I didn’t think git’s “cheap branching” would matter to me. I am not exaggerating when I say that it has dramatically changed the way I work. Because branching and merging are so easy, I create a new branch for each feature or bug I’m working on. I am never tempted to check in broken code just because I want a checkpoint.
  • The index: It is really nice to be able to just check in a portion of the changes in my code rather than having to commit the entire file.
  • git stash: If I’m in the middle of some big change and need to fix a small bug, I can hide my outstanding changes, make the fix and restore my changes without a checkin.
  • git rebase: Sometimes it is really handy to be able to rewrite history.
  • Git is a DVCS: My work isn’t crippled when I am not connected to the network. I can check code in and out. I can branch and merge. I have a full history of the repository. Awesome!
  • Very flexible workflow: With git I can push/pull to a central server like CVS or SVN. Alternatively, changes can bypass the server and be sent directly between working repositories.
  • Git is fast: Neither CVS nor SVN come close to git’s speed.

Is git perfect? No. Off the top of my head, here are some things that I would really like to have in git:

  • git checkout -i: Sometimes I want to rollback a few changes in a file. I imagine this would work very similarly to ‘git add -i’.
  • git stash -i: Sometimes I only want to stash some of my changes. This too would work like ‘git add -i’.
  • Local tags: Local branches are great; local tagging would be too.
  • Track empty directories: I understand why this doesn’t currently happen, but it can be obnoxious.
  • Comments on branches: It is easy to make a lot of branches but unless your branch names are super descriptive (and therefore super long), it is also easy to forget what each of them is for.
  • Better/more documentation: In general I am able to find what I’m looking for, but I still don’t know what the “fetch-all” in git svn fetch --fetch-all actually does.
  • Windows support: Not that I’ve actually tried it, I’ve just heard that it doesn’t work well.
  • GUI options: Most of the time I work in the cli but sometimes a gui is more convienent. I’ve heard multiple people ask for a tool that would allow them to branch and tag without checking out code. gitk and gitx just don’t offer all the flexibility that some other tools do (e.g. WinCVS, SmartSVN, TortoiseSVN, etc.).

Why do you like (or hate) git?

Setting up OpenID using my personal domain

If you haven’t seen the site before, go take a look at Stack Overflow. Imagine digg hooking up with wikipedia and having a baby that looks kinda like a forum. Stack Overflow is that baby. It is designed as a place for software developers to collaborate and get questions answered. Very cool idea. Excellent implementation.

I’ve been a lurker on Stack Overflow since it opened up. Well, I dunno… my uid = 6937 so it was fairly early on. Anyway, a few times I’ve wanted to participate in the community, but I’ve always held back. I have never really gotten in to the whole OpenID thing, and OpenID is the only authentication that Stack Overflow uses.

Yes, I know that I already have OpenID accounts (obviously, since I was able to register with Stack Overflow), and it is really cool that my existing accounts with WordPress, Blogspot, Flickr, Google and are already setup as OpenIDs. The problem is that I am not really committed to any of those services. I registered several years ago, and I use it for all of my permanent communication. Those other accounts, they’re pretty much disposable.

I sign up for every new service I encounter just so I can check it out. (Yes, I use a different randomly generated password for each site.) Most of these websites never even get a second visit. Even the accounts I use frequently, like Gmail, aren’t “permanent” identities in my mind.

What if Yahoo goes bankrupt and closes down Flickr? What if Gmail suddenly becomes really uncool, and people laugh at me for using it (like we laugh at people who still use Hotmail)? I was afraid that I’d start using one of these OpenIDs and then I wouldn’t want to use that service any more. Fortunately for me, I figured out how to use my personal domain as an OpenID. It was really easy.

Before anyone points out my logical fallacy, I realize that, because I’m not actually hosting my own stuff, if myOpenID goes down, I’ll still lose all of that data. Somehow, the risk doesn’t seem as big if I’m using my own domain. I never claimed that my fear was rational. 🙂

Here’s how easy it was to set up:

  1. Signup for a free account at
  2. Click on the “Your Domains” link on the right of the screen enter your domain name
  3. Decide what url structure you want to use (either or
  4. Before you can actually use your new OpenID, you’ll need to verify that you own the domain. I just had to point some randomly generated subdomain at
  5. That’s it!

And now, life is good. I can log in to any OpenID enabled website using my own domain. I can start participating in the Stack Over community!