comments edit

I have a really old Kodak photography book laying around that delivers various tips for how to advance from your typical crapola™ snapshots into something worth boring your friends with on Flickr after your last vacation.

It is really too bad that I’ve forgotten everything the book had to say. Fortunately Robb Allen is starting a series of Photography lessons for our general photography improvement. Read lesson 1 and start taking better pics. Your friends and family will thank you for it.

My personal tip is to buy the biggest memory card you can afford, fill that sucker up when taking pictures, and delete vigorously before showing showing the pics off. Memory is getting cheaper and is way cheaper than paying for film and developing. Why settle for just one chance to get a great shot of your kid picking his nose when you can get three and keep the best. The odds are in your favor.

Just remember to delete vigorously because while memory is cheap, time isn’t.

comments edit

Via Larkware News I noticed that Subversion 1.3 has been released. Looking at the release notes I noticed one thing in particular that caught my attention.

Official support for Windows ‘_svn’ directories (client and language bindings)

The “_svn” hack is now officially supported: since some versions of ASP.NET don’t allow directories beginning with dot (e.g., “.svn”, the standard Subversion working copy administrative directory), the svn command line client and svnversion now treat the environment variable SVN_ASP_DOT_NET_HACK specially on Windows. If this variable is set (to any value), they will use “_svn” instead of “.svn”. We recommend that all Subversion clients running on Windows take advantage of this behaviour. Note that once the environment variable is set, working copies with standard “.svn” directories will stop working, and will need to be re-checked-out to get “_svn” instead.

What this means for VS.NET developers using Subversion is that using Ankh to provide Source Code Control Integration (SCCI) becomes a more attractive option. One reason I held off on using Ankh is that it required using a separate build of Subversion. But now, I’m so comfortable using TortoiseSVN that I prefer it to using source control bindings, so I probably won’t switch just yet. The SCCI interface just doesn’t seem rich enough compared to the turtle and its shell extensions.

comments edit

I happened to notice my dog Twiggy apparently admiring herself in the mirror. At one point she was right up against the mirror looking at herself. By the time I got my camera, she had decided to on a more comfortable vantage point to check herself out.


And here I am working my ass off while she just lounges around. I really need to get her a j-o-b.

comments edit

Yesterday I received a call from my very exasperated father who recently has been helping my Korean mother learn how to use the web and web-based email.

  1. Dad

    Talk to your mother!

  2. Me

    Umm.. Ok. About what?

  3. Dad

    She got a nasty email and now she’s furious that I sent it to her. I tried to explain the concept of SPAM to her, but she doesn’t believe me. Maybe she’ll believe you.

  4. Me (groaning)

    Okay! Put her on.

My poor mother didn’t understand how anyone could get her email address and send her such filth, so therefore via deduction, it had to be my dad. She was shocked and appalled that he would send this to her.

I calmly explain to her how companies just love to sell your data to other less scrupulous companies who then send out emails to EVERYBODY. I get it, she gets it, dad gets it. Everyone gets it. I think she understands now, but I wonder if she’ll continue to bother with email now.

comments edit

These days it seems that the 40-hour workweek is a pipe dream of of a bygone past (if it ever was a reality). This seems especially true for the field of software development which seems to glorify working excessively long hours like an old fashioned pissing match.

It is pretty well documented that working long hours can end up being counter-productive. After working for a prolonged stretch, workers tend to get fatigued and the law of diminishing returns kicks in. I read of one study that demonstrates how productivity steeply declines in the 45th to the 50th hour. In my opinion, this is especially true for software development as code written in the wee hours of a marathon session tend to produce more work in the long run due to bugs. That gets budgeted elsewhere.

Software developers and management just don’t keep track of the real productivity numbers. They’ll remember that you got the code completed by the deadline via marathon sessions, but they won’t factor in the time spent debugging and fixing bugs found weeks later due to that session.

Not to mention the negative impact on employees relationships and physical health. It’s no wonder that a common new years resolution among developers was to get in better shape.

So I find it fitting that my friend Kyle sends me this article written by Joe Robinson, author of “Work to Live”. The title of it is “Bring back the 40-hour workweek – and let us take a long vacation

I’ve written about work-life balance before, but I should make clear before anyone gets the wrong idea that desiring work-life balance does not make one a slacker. Unfortunately I have been having trouble personally applying this philosophy since I started a company, but as an owner, every extra hour benefits me. For many salaried employees, creating an environment where the bravado of working long hours is encouraged, primarily appears to benefit your corporate masters (unless you are paid in overtime etc…).

So for this year, make your resolution to work less and live more (unless you really are a slacker in which case you should get off your lazy butt). Spend more time getting into shape and other hobbies you enjoy. If all you want to do is code, spend that extra time contributing to an open source project. You might learn something that helps keep you competitive.

comments edit

This is an eye opening and interesting account of how Tom Oward was able to data mine Amazon’s wish list database to get a profile of “subversives” based on their requested reading list. Makes you think twice before adding a book to your wishlist.

Using a pair of 5-year-old computers, two home DSL connections, 42 hours of computer time, and 5 man hours, I now had documents describing the reading preferences of 260,000 U.S. citizens.

I downloaded all the files to an external 120 GB Firewire drive in UFS format. The raw data occupied little more than 5 GB. I initially wanted to move all the files into a single directory to facilitate searching, but as the directory contents exceeded 100,000 items, the speed became glacially slow, so I kept the data divided into chunks of 25,000 wishlists.

Next comes the fun part – what books are most dangerous? So many to choose from. Here’s a sample of the list I made. Feel free to make up your own list if you decide to try some data mining. Send it to the FBI. I’m sure they’ll appreciate your help in fighting terrorism.


[Via Boing Boing]

comments edit

I’ll try not to bore you with the typical reflections of the past year. Yesterday it pretty much rained all day, ruining our NYE plans. But where one door is closed, another door opens. We ended up having a grand time at our friends place playing board games and drinking white russians. A toast to 2006!

By the way, I have to give a shout out to my soccer buddies. These are a diverse group including some amazing soccer players of a range of ages who showed up despite the rain to get a sweet game on. It rained the entire time except for the last 15 minutes or so. You gotta love that type of devotion (or is it insanity?).

My favorite play was the one in which involved a give and go between a teammate and his mother. A mother son play steals the day.

comments edit

So it looks like our New Years Plans have been derailed by the rain and the Fire Marshall event organizers as reported by the fire department’s blog. It stopped raining an hour ago, but the wet conditions and the sheer amount of electrical equipment needed for Giant Village has made it a safety hazard. Bummer.

personal comments edit

In a blatant ripoff of Scott H, I am going to post the best of “You’ve Been Haacked” 2005 edition. This year, you laughed, you cried and when you were done, you came over and briefly glanced at my blog. But I took it in stride and continued to write, rant and rave… and this was the best I could come up with in 2005^1^.



^1^ There is no objective criteria for choosing these posts. I simply deemed these to be the highlights.

comments edit

While we’re on the topic of appropriate analogies for software development, my homie Micah writes a post about how certain analogies fall short, and he compares writing software to being an artist.

He has some great insights into the idea that there is no such thing as “maintenance” in software, it is merely just another software development phase. But I have to respectfully disagree on his idea that perhaps we would do better to call ourselves software artists.

I disagree because of the image I get when I imagine the general archetype of the “true” artist. I often think of an artist as one who takes some tools and a medium, and creates the art that was there all along, but dying to get out. Now let’s try applying that to software. Do you really think there’s an ERP system in your keyboard dying to get out, if you’d only let it? Perhaps.

Also, the true artist does not create art for his or her audience. The artist creates art for the sake of art, the audience be damned! Now try telling that to your next client.

Ummm… we were kind of hoping for a content management system. You wrote an RSS aggregator.
Indeed I did! Isn’t it beautiful! It is my masterpiece. Client:
Well we’re not paying. You:
I wouldn’t expect such a simpleton as yourself to be able to truly appreciate such fine code.

I don’t know about you, but I’m not interested in living out the romantic image of the starving coder.

Rather, I think of writing code as being more like a DJ. You have your set of tools and existing code snippets (records) and until you’re a big name, you take requests. However, even if you’re a big name, you still read the audience as you play, refining the music choice, tweaking knobs and sliders here and there until you have the audience (your client) in a joyful frenzy on the dance floor.

Honestly though, I don’t think my DJ analogy is all that useful. Ultimately software development will mature to the point that it will not need an analogy, it will be understood for what it is. How many building engineers do you imagine lose sleep at night thinking about a proper analogy to their craft?

Wait, I got it! Building a skyscraper is like writing software!

comments edit

In some of my projects, I take a less purist approach to unit testing in that I allow unit tests to touch the database. In order to “reset” the database to the state it was in prior to the test, the code enlists COM+ 1.5 transactions via the [RollBack] attribute in MbUnit (there’s also one for NUnit).

My preference is to have a local copy of the database when developing, but there have been times when this was not possible and I needed to run my unit tests against a remote database I did not have full control over. The problem is that the RollBack enlists the local Distributed Transaction Coordinator to acquire a transaction. If the database server is on a remote server, it attempts to use Transaction Internet Protocol (TIP) instead which is disabled by default.

At the time, I was being lazy and left it alone, moving on to something else. Fortunately, my laziness has paid off as another smart person dug into it and figured out the details to getting this to work properly. See, sometimes laziness does pay off. ;) Thanks Steve!

comments edit

Thanks to the generosity of my folks, I’ll be reading the following books. If you were planning (or want to) read them as well, click on the images below.

comments edit

My parents are downstairs watching basktetball, my brother will arrive here tonight around 8PM, I’m wrapping a gift for my wife, and my coffee downstairs is getting cold.

But still, I wanted to wish you my loyal readers (and determined Google searchers) a very Merry Christmas, or a Happy Hannukah (or is it spelled Channukah these days?), or a happy Kwanza, or Yuletide cheer, or a belated Happy Solstice. If you don’t celebrate anything this time of year, and I really don’t blame you, then just be happy that the terrible Christmas music will soon end and we can prepare for the real fun holiday, New Years!

Anyways, I hope you are all doing well.

comments edit

My good friend Micah finally started a blog. He is the CEO of my company, VelocIT, which makes him a business partner as well as a friend.

Micah is one of those “deep thinkers” which explains why he has two posts already and nothing technical. Just some philosophical rubbish. Come on Micah, show us your code! ;)

All kidding aside, I expect you’ll see some insightful writing on software development, management, etc… This guy used to be a Java programmer so he’s, switched to C#, and now just bosses me around. He has seen the industry from both sides and has a lot of interestings things to say. Now he can just write them down.

comments edit

As I recently said, you have to be a bit MacGuyver to be a successful consultant. I’ve also whined about how difficult hiring is, especially when you want to hire MacGuyver. But then there are times where you work with someone who makes MacGuyver look positively clueless.

Jon for example takes the gum wrapper (to really beat an analogy to a sickening death) and shows us how to upload a lot of custom data to MapPoint given its constraints. Now this is a sweet example of problem solving.

Just for the record, I let Jon have the interesting work while I futzed around with these stupid textbox labels.

comments edit

I’ve learned a valuable lesson recently. To be successful as a technology consultant, it isn’t enough to just be able to hit the high notes. You’ve gotta be able to hit the middle notes too. You have to channel a bit of MacGuyver inside.

A while ago we hired a brilliant consultant to help us deliver a project for a client. This was one of those “finger in the dyke” projects in which we had limited time and money and had to help the client deliver something to their clients just good enough so everyone could get paid and we could properly fund the next phase which would include complete repairs and refactoring and a much cleaner solution.

The project timeline and budget for this phase would have been impossible to make as a custom development project from scratch. We decided to that it would be good enough to use an open source project that got us 80% of the way there, and then customize the 20% to get the rest of the way.

Of course, midway, our client discovers that people at their client, fearing for their jobs, had withheld some crucial requirements. Our one-to-one mapping of the open source software to the problem domain was no longer straightforward. This is where a consultant has to channel the inner MacGuyver. We needed for the consultant to look in his pocket, take out the piece of gum, foil wrapper, and loose thread and make it happen.

Sometimes, to deliver a product, you need a solution developer, not just a software developer. This consultant was a brilliant software developer, who had hit the high-notes on his pet project. But he could not bring himself to hack together a less than perfect solution.

Now, despite my last name, I chafe at the thought of hacking together a solution rather than executing something cleanly and elegantly designed. But as I pointed out in the past, there is no perfect design. You have to make do with what you have. The perfect design in any situation is one that works within the confines. It may be flawed from software development standards, but if it meets the needs of the client and fits all the constraints, then it is perfect in my book.

The consultants job is to make the client aware of the cost of the sub-optimal design, not to reject the client’s needs.

comments edit

Sir Tim Berners-Lee starts a blog and it’s a veritable love fest in his comments section.

And why wouldn’t it be? He did invent the World Wide Web after all. What would we be doing for a living if it were’t for the web? Probably still writing code, but still. It would be a slower costlier affair to write code without the benefit of Googling information.

One person commented that the Web would probably have happened anyways, but that misses the point. It may have happened anyways, but perhaps it would have been poorly realized and we’d only now be using a 1993 version of the web (blink tag anyone?).

Remember, Leonardo Da Vince conceptualized the helicopter long before the modern helicopter was invented, but you could hardly call him the inventor of the helicopter. Had he been able to follow through, perhaps we would have had helicopters before the mass produced car. Imagine that? Our world would probably look very different. Sir Tim followed through and we have what we have, warts and all.

comments edit

Hiring good developers is challenging. There’s a small bit of science and a lot of art. Even when a hire is brilliant, he or she might not work out. When hiring, you don’t just want a list of experiences, technologies and languages… You want a person who exemplifies being a self-starter (rather than just listing it as a buzzword on the resumé) who is also smart and can get things done. You’re hiring a personality as much as a liste of skills and experiences.

One tool that I’ve found invaluable is the use of blogs. That’s how we hired Jon Galloway who is a total superstar. As I told Jeff Atwood recently in a conversation, not having a blog won’t disqualify a person from my consideration, but it certainly helps. Otherwise I would want a strong recommendation from someone I know and trust. I have just been burned with bad hires too many times over the years to rely solely on a resumé and an interview.

To make it more difficult, once you identify a superstar, you should not be surprised if their current company pulls out all the stops to keep them. This sort of happened recently to us, as we had another superstar interested in working with us, but his company, unbeknowst to him, was about to launch initiatives that addressed his major concerns. They made a compelling counter offer and he chose to stay, though it was not a decision made lightly. I won’t name names, but he’ll probably show his face in here at some point.

We are happy for him, as it is a good deal, but we are also disappointed because finding good talent is very difficult and costly. I’ve heard it said that it can cost up to a year of a developer’s salary to locate a good one. There is the cost in spending the time and resources to locate someone compounded by the opportunity cost of not having the developer currently plugging away at projects and providing value.

So in that vein, Jon put a job posting on his blog and we are still looking for one or more solid consultants/developers to help keep an eye on me.

So if you are interested, or know someone you can whole-heartedly recommend, please send me a resume (phil at

For those of you who have sent me resumes in the past, I apologize if I haven’t responded. We have started to put every resume in our internal Groove workspace so we don’t lose track of people. It’s been difficult keeping up with everything.