r-studio, I thank thee, again

While using cygwin today, I was distracted by a cow-orker, and uttered the arcane rm * in the wrong directory. Damn, a whole bunch of files that I did want to keep were whisked away to the bit recycler.
I had bought r-studio about 6 months ago when I had a hard-disk go west and scribble “Fish” all over the disk. It did a great job then, and it did a great job today.
After making sure I didn’t write anything to that partition for the rest of the day, I got home, and ta-da ran r-studio and recovered everything.
That rocks. I’m a very satisified customer. Well worth the US$50 I paid for it. If you need something to recover deleted or corrupted data, then this is the tool to use.

Advertisements

The motorcyclist and the truck

I’m been a motorcyclist for over 10 years. To be completely fair, I’m a bit of a fair-weather-rider, as I don’t feel that riding in the pouring rain really adds anything much to the whole situation, it makes it more slippery and gives me less chance to avoid crazy drivers.
A couple of beers with a close friend have reminded me of a conversation that I had with one of my motorcycling instructors.
When you’re riding a motorcycle, it doesn’t matter if you have the right-of-way if a truck runs the red light. Lying on the road, badly broken and about to die complaining that you had the right of way is somewhat unimportant at that stage. You’ve just been squished.
When you’re riding you need to be constantly aware of dangers, “because it doesn’t matter how right you are, if you’re dead right”

As geeks we have a tendency to think that the world understands about “being right”. After all, being wishy-washy to a computer, or skirting around the point doesn’t tend to get programs to compile any faster. Being right is all about how our brains are wired, much to the frustration of my wife at times as I scurry off to check things on Google to make sure that what she (or I) have said is right.
Maybe it’s geeks, or maybe it’s men (or maybe men-geeks are just really bad) but we’re super-unaware of certain things, such as nuances in language and understanding that not all questions are really asking for an honest, literal answer.
To use a completely hypothetical situation that makes my waffling a little more concrete :
“Does my ass look fat in this?”, “Have I put on weight?” or “Is my cooking really that bad?” are 3 very obvious questions that fall into that category. An immediate “I love you” is the correct response to any of those, a delay in answering and you may as well slash your wrists and bleed to death on the carpet, it’s going to be quicker, easier and less painful.
Sometimes the situation isn’t as obvious so, watch out for trucks running red lights, it happens more often than you would like, and if it’s already raining, maybe you’re better off just staying at home and avoiding the whole situation in the first place.

Java, Ruby, Groovy, Python, C++, Perl, Smalltalk, who cares…

I had a conversation the other evening with our CEO (hi Roy) about Groovy and I made the heretical statement that I just don’t care about it. I spent the next couple of days thinking about why.
Now, before James Strachan and his codehaus minions come thundering down upon me I’d like to be able to explain myself.
I like the concept of Groovy, I like Perl, I’m not that keen on C++, I’ve never used Ruby or Python or Smalltalk, but I’ve investigated them. I use Java in my day to day development, and have done pretty much since Java came out and I defected from the C++ camp. So, I’m not really a language bigot, but I like how Java just doesn’t surprise me. It’s not perfect, but it solves 99% of my problems, and it does so fairly elegantly.
I used to care a lot about the language, and I used to think it was really important to be incredibly productive and know the language and all the new features as they became available. I still like to do this, but it’s for my own personal gratification.
Since joining a consultancy and working on customer sites, with all the vagaries of process, of maturity of development environments and of levels of politics I’ve rapidly decided that the environment is a first order determinant of how productive I can be, and not the programming language. Heck, the choice of using EJB or not generally doesn’t even rate as a factor when all the build is done via some busted-ass IDE running a JVM that was used by Noah to build the Ark, there isn’t source code control and there are meetings called on a daily basis to discuss the current status of the biscuit rations.
At this stage, giving me a “better language” would be akin to giving me Lance Armstrong’s bike and expecting me to finish first in next years Le Tour. It ain’t gonna happen boys and girls. (Lance, if you’re reading, I’d like your bike 😉 )
If I ever get to the “perfect” development environment (heck, I’d happily have an environment that doesn’t add time to the project) then, and only then I’ll start to worry about which language is the “best”. Until then my best option is to use Lean Development techniques and focus on reducing the waste in the environment and giving me and my team more time to actually develop code, regardless of the language.

Just spreading the news …. KeepResident Eclipse Plugin

The performance of Eclipse (and other large Java applications) has long suffered due to the Windows virtual memory manager. Windows has a tendency to preemptively swap Java processes out of physical memory, even when there is still plenty of physical memory available. This interacts very poorly with Java processes, which do not have good locality and touch a lot of memory. The problem is exacerbated when Java performs garbage collection, which causes the Java process to touch lots of memory that has been paged out to disk. Ever had Eclipse randomly hang for 15-20 seconds? This is most likely the culprit.
I’ve downloaded it, and it works fantastically. I’ve got the settings at 200Mb minimum and 350Mb maximum
and Eclipse is very, very snappy.
http://suif.stanford.edu/pub/keepresident/

The Consulting Dilemma

As a “consultant” (I can’t find a better word, maybe “programmer for hire”) my role is to go and work with other companies on software development (coding) or software process or both. The companies that I’ve done work for have varied in both ability and desire to embrace change or my input. In some cases I’ve been treated like a valuable friend, enthusiastically embracing the suggestions and have been fantastic to work with. Sadly, in many cases the opposite is true.
I currently work with ThoughtWorks, and we pride ourselves on our recruitment process, and the people we attract. As a result, I get to hang around with some of the smartest people I have ever met, or worked with. As a group of people we are culturally aligned, and whether or not you agree with the Agile/XP approach, or what ThoughtWorks does, we tend to have common interests. I’m sure the same is true if you work for ObjectMentor, or Accenture or IBM-GSA. You are attracted to the organisation because you share some common interest. These vary from cool technical challenges, to enormous salary expectations, or any other random reason.
As a consultant you don’t (generally) get to pick and choose your assignments, and this is where the dilemma occurs. Consulting companies make money by having their staff billable (well, duh!) so 75%+ of the time we’re out earning $$$ for our respective organisations. And the companies that most need help are the ones that tend to hire consultants. They generally need help because they are unable or unwilling to attract talented staff, or are in such a hole that they need some additional expertise to help them out.
For me this is how the dilemma manifests itself, I love working with my colleagues because we share the same world view, but as a consultant, I end up working with companies that I would never, ever in my life apply to work for.
And the reason I don’t want to work there is not because the people or the organisations are intrinsically bad, evil or wrong, but because we don’t share the same values. I like to solve business problems, I like to work with the business and talk to them about what is going wrong and then communicate openly and honestly to them about how I can solve it. I then like to solve problems in the more appropriate manner, which is normally writing good clean code, with appropriate testing and resulting in a codebase I can be proud of.
And the cool thing is that at some places where I feel like strangling people, my colleagues in other organisations would really find it peaceful and well within their enjoyment zones. This isn’t a complaint about customers, that’s just stupid. This is a commentary about how working as a consultant, you’re just about guaranteed to not work with people that share your values, or your culture.
So, what are we to do ? Do consulting companies always struggle with this ? Are there long term consultants who’d like to share their secrets for dealing with the “mismatches” ? Is it just one of those challenges ? Surely not everybody just sucks it up and deals with it. Life is far too short to work at places that suck. Should consulting companies be more choosy about our customers ?

Classfinder

After the much hyped release of jdocs.com, I was reading some comments and somebody mentioned classfinder. As I’ve been looking for a good Javadoc browser for a while, I thought, well, I’ll give it a go.
It rocks. It uses a very small HTTP server, and all you need to do is unpack it and place links or shortcuts or the actual Javadoc into the deploy directory, and that’s it. It can act like the normal Javadoc viewer (the standard 3 frames) plus it includes a search capability in that mode. The other mode is a 2 frame with a class list matching the search in the bottom frame, and the selected class in the top frame.
At least this way I don’t have to see the jdocs.com adverts, and I can do work when I’m not connected to the internet.
It’s GPL (if that matters) and took about 3 minutes to download, install, configure and start working with it. Very, very nice.