30 June 2009

Painting the Bike Shed

Painting the Bike Shed - ACM Queue
What you witnessed was, unfortunately, a typical reaction to simple changes in a codebase. Have you ever noticed that when someone checks in some complex and, oftentimes, horrific piece of code, the check-in is greeted with an almost deafening silence? That is often because the people who should be reviewing such code just don’t have the time. Unfortunately, lots of people do have the time to review a 10- or 50-line change, and since they feel guilty for not having checked the bigger pieces of code, they nitpick the small pieces.

The explanation for why this occurs was first given by C. Northcote Parkinson, who wrote a book about management (Parkinson’s Law and Other Studies in Administration, Ballantine Books, 1969). He stated that if you were building something complex, then few people would argue with you because few people could understand what you were doing. If you were building something simple—say, a bike shed—which most anyone could build, then everyone would have an opinion. Unfortunately, as you learned, it’s not enough just to have an opinion, but most people feel they should express that opinion.

The engineer who wrote the original code clearly figured out that he was trapped in a pointless loop and decided to break out of it by telling people to paint the shed any color they liked. He or she was probably pretty sure that no one would actually change the color of the shed, but by not engaging in the pointless loop was able to let people get back to ignoring more important parts of the code, which is what they had been doing previously.

Determining What's Been Changed on RPM Based Systems

28 June 2009

Lifehacker's Firefox Add-On Packs

mime-util (Mime Detection Utility)

mime-util (Mime Detection Utility)
mime-util is a free, light weight, Open Source Mime Detection utility for Java.

Mime Detection has come a long way from it's beginnings as used for email content. The mime-util library is able to detect MIME Types from Files, InputStreams, URLs and byte arrays using plugable MimeDetectors utilising various extensible and customisable detection policies such as extension mapping, glob file name matching, magic data matching and other content sniffing techniques

What Pair-Programing is Not | Javalobby

10 June 2009


Why aren’t you using ionice yet??? « Fried CPU
Most intermediate-level Linux users have heard of, or know how to use, the nice command. Well, ionice is like nice for the disk.

The best usecase for using ionice to improve performance is when you need to do two classes of tasks at once: The ones that don’t use much disk IO but demand fast response, and the ones that do a LOT of disk IO but don’t need it done urgently.

Find Action Intellij IDEA shortcut

Somehow I never knew the Find Action shortcut in Intellij IDEA.

Faster CI

This article proposes a good idea to make CI faster. Use code coverage information for tests to determine which tests should be run when code is committed. Running all tests on a project can take a long time, even if you split out some long running tests to run on a "not per-checkin" interval.
Don't you hate committing code and then waiting hours to find out you broke the build? Even worse is when other people commit code at a similar time to you, and you get dragged into the 'who broke the build' witch-hunt by pure circumstance.

If your build times are blowing out because of long test runs (greater than ten minutes), then you are most likely suffering from CI (Continuous Integration) latency and the above problems are real problems for you and your team.

05 June 2009


I found WindowTabs very useful to automatically group all my Putty terminals into a single tabbed window. Just configure it to only group applications called "putty.exe" and set auto-grouping to true.

04 June 2009

Maven import scope to import dependencies

Importing Managed Dependencies - Maven - Codehaus. Interesting, never knew you could "import" dependencies without pom inheritance.


/experimental/jsr166/src/jsr166y/ConcurrentReferenceHashMap.java lets you create ConcurrentMaps that have any combinations of strong, soft or weak keys and/or values.

Alex Miller Concurrency Gotchas

Alex Miller provides an excellent summary presentation on common concurrency problems

Escape Analysis in Java 6 Update 14 - Some Informal Benchmarks | Javalobby

Escape Analysis in Java 6 Update 14 - Some Informal Benchmarks | Javalobby. I tried the vm parameter myself on a benchmark that had a mix of collection access, maths and io and it had very little effect, so I wouldn't assume it helps in all/most circumstances.

Lifehacker Pack 2009: List of Essential Free Windows Downloads

Linux Readers' Choice Awards 2009

Sata 3

SATA Revision 3.0 released • The Register
promising file-transfer speeds of up to six gigabits per second