Project Management – in a Nutshell


A wonderful gem I found here:

I remember telling a friend
that being a project manager
is a little like being a bouncer:
where there’s a problem *here*
and a door *there*
and it’s your job to get the problem out the door.

For some a gentle gesture will do
while others need a push
and still others need to be picked up by their pants and carried

In no case should you ever let someone get *further* from the door.
So that’s me.

By Merlin Mann 🙂

I dedicate this to all my friends and colleagues who face daily the Project Management challenges, specially to Peter, Julia, Mike and Milos.

Free eBook on ALT.NET


It is always a nice surprise to find something that is free and actually useful on the Net :-). Like this one: a fellow Ottawan Karl Sequin wrote and generously made available as free download “Foundations of programming” eBook.

He touches many topics of various levels from high level design concepts (dependency injection) to low level “Back to Basics” – how memory allocation and pointers work. Especially the later is often neglected and overlooked (and consequently misunderstood) by younger developers who started their education with a garbage collected language such as Java or C# and never were exposed to beauty and horrors of C 😉

The book is using .NET and C# as platform, but the applicability of the chapters goes way beyond the Windows or Microsoft world. After all, Alt.Net has very close relations with Java world.

If you have time, give it a look. Were it not free, I would say it is worth every penny. Now I can only say it is definitely worth the time you spend on it.

Thanks Karl, I hope I’ll meet you in person sometimes. The advantage of living in Ottawa is that you have lots of smart people around you :-).

After the Spring Storm


Few days ago, I have received an email asking to attend the SpringSource conference and offering $300 discount if I decide to buy before end of month. The timining was pretty ironical, considering the recent contraversy about SpringSource Entreprise Maintenance policy change. The was a heated discussion on and even FAQ was compiled by Rod Johnson to explain the whole thing.

So what is the issue: SpringSource, commercial entity behind community driven Spring Framework decided to capitalize on the investment and push the community toward paid service suport contract. Whether or not it was related to funding round and VC’s entering the game, is not important. Unfortunately, the terms were not really well explained and SpringSource did initially very poor job explaining and communicating the actual change. The community overreacted and lot of people started to call for code fork, project Summer or similar – or switching to different framework.

What the change really means is that maintenance releases will not be available (as binary, official downloads) after 3 months, unless you pay for the support. It means that using new policy after let’s say release 2.0, only for three months everybody could download binary distributions of 2.0.1, 2.0.3 etc. If at the end of month 3 you would need fixes in the 2.0 branch, you would be on your own. The source code repository with 2.0 branch would still be available, with fixes committed (see later) but without tags (or labels) and certainly without pre-packaged download of 2.0.4, 2.0.5. You could compile the actual head of the 2.0 branch yourself, but it would not be clear what version you actually run.

This is actually not such terrible limitation as it may seem. Maintaining old code base and backporting the changes from trunk into fixes in branches is lot of work, requires testing and so on. SpringSource did invest a lot into the codebase and as commercial entity provides service to the users. The release management and software maintenance is slightly different type of work that developing new great release, and I can imagine that there are even less contributors and volunteers for this (seldom appreciated) kind of work. Multiply that with many branches and you’ll see the magnitude of the problem.

What did SpringSource do wrong, in my opinion is that they are taking away something that was available for the community for free and that created lot of negative sentiment. There are two ways how to push people to pay for free service – and cutting unless you pay is wrong one. Right way is to offer more on top of what is available for free, something that has value specifically for enterprise clients. There are several areas where there is a need: more and much better samples, template applications, guides, tutorials. Their availability has huge value for customers in saving development time and better quality of the products using the Spring platform.

There are several technical subtleties that are in open: the FAQ says that the changes and fixes from trunk will be available in the maintenance branches, but does not say when. Delaying changes can be powerful argument … Lack of tags in public repository also implies existence of private repository with these tags – how else could the SpringSource build the “supported releases”. The existence of two repositories in project (unless you use distributed VCS, of course) is often starting point of splitting project to payware and limited “community edition”. I hope this will not happen to Spring.

The most unfortunate impact of the maintenance policy decision may be for the Spring based opensource projects, that helped a lot to establish acceptance of the platforms over last few years. Dilema of facing either cascading changes of permanent upgrades just to keep in sync with latest trunk version, or permanently monitoring the branch to see which of the changes are important – in absence of “official” maintenance release with defined bug fixes etc can be an issue for many projects. I hope SpringSource will find workarounds and solutions for these.

Despite of that, forking Spring would be very bad idea. The very last thing enterprise Java needs is another framework that is esentially same or very similar than existing one. SpringSource employs brilliant engineers, Spring community also has great contributors – what is the point of splitting the forces when there is no architectural disagreement, the issue is “just money” ?

Forking also does not solve the core problem: who will be providing the community service of maintaining and building the old releases. The maintainers of Summer codebase (or whatever the name of Spring forked successor would be) will face the same dilema – choose between working for free forever or finding way how to employ enough manpower to keep the balls rolling.

I would recommend that instead of forking Spring codebase, whoever feels like it, try instead to fill in the gap and provide the “inofficial official” builds, a “community maintenance releases” as counterpart and alternative to official SpringSource maintenance releases for enterprise (== paying) customers. This would actually help the project and all projects that depend on it much more than asking them to switch.

It would also not hurt SpringSource – I am convinced that they would loose very little revenue (if any) because of that. It has been done (Centos vs RHEL). If my project would be based on Spring platform and not on commercial Java server (which it is not) and the support cost would be reasonable (which it IMHO is), I would happily pay for priviledge to have access to the people of Juergen Holler’s caliber (and many others).

Let’s face it, folks: when it comes to support and software maintenance and similar less attractive areas of our profession, there is definitely no such thing as free lunch …

Three great Git resources


Before I forget 🙂

1) The Git Magic

2) Two git books Pragmatic Git Book and Git internals – nice complement each other

3) Linus Torvalds slightly offensive and very funny talk at Google

in addition to great, precise but not necessarily most digestable manual

iPhone firmware 2.1 – first impressions


I was brave and updated right away last Friday, as soon as the update appeared, both the iTunes and the iPhone firmware. And so far, so good. Initial observations are quite positive – at least so far, from using it during last few days.

I never had any issues with the dropped calls, so I cannot report any improvement. What seems to work better is browsing: I get much less (if any) connection errors. It is hard to say whether it was the firmware, or Rogers fixed something – or the fixed firmware causes less issues to network – it looks like improvement.

What is definitely a huge improvement is sync time. Backup now does not take 5 minutes+, it is down (after initial one) to less than minute and whole sync with transfering new podcasts and application updates is done in 2-3 minutes max. The application update still takes about same amount time – at least it feels like it.

Overall, there are few nice little improvements, like this one in list of podcasts:

Note the detail info that indicates half-finished podcasts and shows how much of the audio is left:

Nice touch (pun intended) 😉

Too good to be true ?


If this thing is real, I am buying one. Regardless that I really, really do not need another Mac :-). Form factor of thin screen of size 9-12 inch, with reasonable subset of touch gestures would be EXACTLY what I need from a internet terminal / reader. Plus the option to tether it with iPhone for ubiquitous connectivity …

Calendar synchronization between iPhone, Google calendars and iCal


Here is my situation: I am using three different Macs (Macbook Pro and two iMacs – one at home and occasionally second one at work) and need to keep the contacts and calendars synchronized at least between two of them (MBP and home iMac). I use iPhone which also has calendar and contacts. And in the cloud, there is Google calendar. Actually, more than one: my own calendar and company shared calendar of my colleagues from Thinknostic. Quite a challenge to keep it all in sync.

Here is the setup that works for me:

To synchronize iCals between different Macs as well as between Mac and iPhone, the most seamless and completely painless way seems to be using Mobile Me. I registered for Mobile Me back when it started – just to grab the name (miro at me dot com), and have not used it much at first. Thanks the 30+60 day extension, I have still until mid November ti decide whether I will keep it or no. The sync feature alone seems to be worth at least half of the subscription price. The other half is push email and really easy way how to synchronize files between Macs … Also to have online access to your contacts when you are not on a Mac can be useful sometimes. But back to the workflow:

Theoretically, both iCal and address book gets synchronized every time you sync the iPhone with Mac. This is not really as useful as it may sound, because I do the sync about once a week to download images from camera and upload new podcasts. And to update the apps, of course. I would not do that more often, for simple reason: the synchronization takes forever. Ten minutes at least. With Mobile me, you can sync as often as you want (every minute if you really want) – and also access the information online via browser.

To synchronize Google calendar used to require some helper applications, like GCalDaemon (free, opensource) or Spanning Sync. Not any more. Since Google opened up the API this summer, it can be done out of the box: read more on here

This solution is almost perfect, the only relatively minor problem is that sync between iCal and Google does not include iPhone: the calendars that you have added to iCal and are coming from GCal are left out – Mobile Me synchronization does not include calendars not created or owned by iCal application. This is not such a big deal as it may seem because from iPhone, you can always access the Google calendar by using the very good mobile Web UI.