Sunday, May 23, 2010

tech search

I thought I'd spread the word about a search engine that does a particularly good job if you're a programmer. I've heard about this in the past, but didn't need it until I started working on a project that had bits of python, ruby, and java (and I'm an expert in none of these).

Saturday, May 22, 2010

Programming with eclipse

Quick! Anyone who's ever used eclipse for more than 5 years tell me how you would find a file in your project(or workspace) with a name that starts with the test "BuildString".

If you answered:
Then type BuildString

I'd believe you used eclipse more than a few hours.

If you answered:

Then type BuildString

I'd ask "what if you where looking for a property file, not a class?"... Even if you got it wrong, I'd believe you use eclipse, but perhaps just misinterpreted my question.

If you answered:
I'd click on then to menu and select 'find', then switch to the file view then...
or any of 100 other possible combinations like:
I'd drop to a shell prompt and use the 'grep'
I'd use windows search
I'd open a browser to google
I'd say "that's interesting, I hadn't thought of that" and give you some credit for understanding the problem and having some sort of plausible solution.

If you said "I've never had to do that" I'd silently intake a slow breath to prevent myself from jumping across the table and beating you over the head with a copy of "programming interviews for dummies".

Listen, at an interview I KNOW folks are lying and overstating their capabilities... I kinda expect it. You're trying to show us you're superman + wonderwomen + aquaman all rolled into one.

But if you show up saying you can leap over tall buildings and I ask you to jump over a 10" rock... You better clear it or I'm just not going to waste any more of my time. I don't care if you can leap tall buildings because of superpowers, a yellow sun, jetpack, trampoline, or any other "cheater"... I just want an illustration that you can actually do something similar to what you originally claimed.

Linux in the cloud (Ubuntu 10.04 vs RHEL 5.4)


I recently did a comparison between Ubuntu 10.04 and RHEL 5.4 to determine what our standard server install should be. Just to be honest, windows server started out to be in the mix but was quickly disregarded as it really doesn't lend itself to scaling out in any reasonable manner. I set these up using the rackspace cloud which I have to say was a dream come true. I had both servers up and running j2ee application servers in less than 1 hour.

First off, I first used redhat back when it was shiny and new (94-95) and used it for quite some time afterward. I've also used a variety of other unix and/or linux systems (slackware, debian, ubuntu, suse, caldera, SCO, solaris, aix, hp-ux). That having been said, I am a linux USER, NOT a kernel hacker. So the inner workings are quite as important as much as getting a useful and reliable system together quickly.

What I discovered is that Redhat is trying to build a stable platform that doesn't change. They are committing the ultimate act of software suicide that IBM and Microsoft (and now even Apple) seem to have perfected in recent years. The fact is that Ubuntu has begun to figure out what makes things tick and they are iterating and evolving with the marketplace.

When I looked at the packages that were supported on the two platforms, everything on RHEL was at LEAST 3-4 years old and some of it was older. I understand from a business perspective, they think this makes sense because it costs money to innovate, but it is a serious problem. They are effectively ignoring 4 years of serious progress.

Ubuntu, on the other hand, was seriously up to date. Ubuntu 10.04 is current as of April and I know they will be release a new upgrade October. In addition, I have the flexibility to back/forward port new packages between releases if it becomes really necessary.

If you want outdated software that will work great as long as nothing in your business changes and you're OK being 4+ years behind everyone else, choose Redhat. If you want software that will evolve and change with your business over time, choose Ubuntu. If you want software that nobody will fire you for choosing, choose Microsoft (or IBM).

Friday, May 21, 2010

Cavemen, Exploding Nails, and Software Development

I've work now for a number of years in organizations of various sizes producing software. Having worked to produce wildly successful and effective solutions as well as hugely expensive boondoggles that are useless I ponder why sometimes things work out and sometimes they don't.

Many folks claim that Software development is in it's infancy and this is the reason for the erratic results. If we're using human development as the metaphor for software development, then I think the current state is not even quite human yet. I think our state is somewhere more along the lines of a caveman or some other ancient common ancestor.

Where we think we are

Where we really are

Or maybe here

What makes things difficult is that people try to map processes and activities into a physical space. We talk about software as if we are trying to build a bridge or a house. Then we take processes used to perform these activities and try to shoehorn development processes into them. Sometimes this actually works and sometimes it doesn't. When works, it then gives people the impression that they have found the solution for performing this activity.

For some reason though, everyone in the has been ignoring the fundamental problem with using these metaphors. In most physical world systems, components seem to behave in a linear fashion. What I mean is that when building a house, it is highly unlikely that ONE nail in the wrong place will cause the house to explode. Nor is it possible for one person to drive all the nails for the house in 1 minute. In software however, this is entirely possible and it happens all the time.

It is interesting because this is actually a fundamental reason why software is so useful. A small stimulus can yield a largely amplified effect. To use the house building metaphor, imagine we could build a magic hammer that could drive every nail into place simultaneously. Most folks would say that would be impossible, but in software development, no problem.

Let's give an example of software that does this. Right now, go find a web browser, navigate to, and search for "new york times". In addition to being able to jump into the actually newspaper content, you will also find thousands (or maybe millions) of books, articles, blog entries and other content that is related. If we where to take all this and map it into the physical world, you would have a book that weighed about 1.2 billion pounds and was 10,000 feet tall. (

Imagine building a physical system using anything other than computer software to be able to search this content and yield results. Now image making that system work (remember, no computers) in less than 1 second. Now further imagine making that system work so that you didn't have to move from your current position nor do anything except type three words (onto a typewriter I'm assuming).

With this background, I'll now get to my point: Because software development is such a large amplifier, it is really easy to produce extraordinary results. Sometimes the results are extraordinarily good, sometimes they're extraordinarily bad. The software used by google is probably pretty complex and the hardware is also likely complicated, but it is nothing compared to the RESULTS.

It isn't that software development is immature, it's that it's not yet the right species for some of the the types of activities we're trying to use to control the process. It would probably be difficult to teach a precursor species to play baseball if they had no opposable thumbs (even if they possessed the intellect).

Many software processes and organizations at this point are designed to limit the variation of the input in order to achieve predictable outputs. This is a dicey proposition at best as software because of the nonlinear amplification effect that software provides. What we need to develop are processes and strategies that use the strengths of software to amplify the probability of producing positive results.

To this end, I think our answers lie well outside traditional engineering disciplines. The fact that engineering of physical systems is inherently limited by the reality of the "real world", we need to start looking elsewhere for our solutions. I think fruitful areas to look for solutions are going to be in areas like psychology and sociology. While writing software, the most important factors are not the software languages, tools, or other documentation we constantly worry about. The more important factors are evolution, communication, motivation, and social dynamics.

While it's true that the latter factors impact any endeavor, most traditional systems have a natural a damping effect on their impact. Software development, being "all in our heads" doesn't have this limitation and is therefore more sensitive to their effects.

Friday, May 14, 2010

Open development

The idea that using an open community to help solve problems is much easier than trying to hire all the smartest people in the world and keeping them locked in a cubicle farm somewhere has come of age. The days of ivory tower design and implementation of software have really passed and any software company worth it's salt is going to have to figure out how to win through cooperation and coordination instead of secrecy and competition.

In my wanderings on this issue, I also noticed that Mark Shuttleworth had posted a blog entry just a couple days ago that seems to hint at things to come from Canonical. Of particular interest to me is that he seems very keen on the netbook and smartphone market which I think is a tremendously smart (no pun intended) move. In addition, the idea of openly discussing corporate strategy is interesting and might be a hint at how to harness the power of the network effect.

A big thing to consider is that the whole of the world economy isn't necessarily a zero sum game. Often, people assumed that for one organization to be a winner in a market, there must necessarily be losers. In the real world, however, this is not really accurate. A more accurate picture is likely to say the there might be some folks who win MORE than others, but is not necessary for me to take something away from you to benefit. If I create a new market and you add to it... we both potentially benefit.

It seems to me that Mark Shuttleworth will be talked about in the future as Bill Gates is talked about now. First off, he's already done wonders, but more importantly, he's still doing amazing things.

Sunday, May 9, 2010

Window decorations in ubuntu 10.04

I've just started deploying the newest Ubuntu release to the various computers in my house (5 right now + a work VM) and one thing I immediately noticed was that out of the box, the window decorations have moved.

They are no longer in the ages old upper right hand corner, but now over in the upper left hand corner. At first I was shocked and a little confused, then I started thinking. Why was I shocked or confused? Other than habit and training, I cannot fathom why the upper right hand side is any better than the upper left.

In order to better educate myself I first set out to see why the decorations would be on either side as well as try to figure out the logic behind moving them to the left in the first place. First up, I see in the ubuntu forums a vibrant discussion about the decision to move the icons in the first place as well as future plans to reuse the real estate on the right for other purposes.

After some more investigation, I find the ubuntu wiki page explaining their design decision for the default theme >here. I also see a bug reported by someone who was similarly confused by the movement here. One very interesting thing about this is that Mark Shuttleworth personally commented on the bug and declined to move the icons back as a fix.

After looking at this, I trolled the internet to see where exactly the "icons on the right" came from and stumbled across this history of GUI evolution from 1981 until 2009. Nostalgia aside, it was an eye opener to me that the MAC OS actually has the decorations on the left.

More importantly, it was proving difficult to find any discussions from Microsoft or Apple explaining why they made the decisions they made. It is becoming clear that the open and transparent manner that Ubuntu is being built is a real change in the game that closed companies that are the "first wave" like Apple and Microsoft are not going to be able to survive.

All that having been said, I still can't figure if either of these positions have an inherent advantage. In searching, I couldn't find much information that folks have truly researched OS level usability (although one would suppose that Apple and Microsoft would have done this. I DID find an interesting study on web search from a usability perspective.

As we've just spent a bunch of time working with search design on an application I'm currently working on, this was an interesting confirmation that some of our design decisions might make good sense.