Example of useless error message


This is what I got trying to track my recent purchase from Apple Store …

That may not be the most useless error message ever seen on Web but it comes pretty close … One would expect a bit more professional treatment from such big company …

Why does a company that puts so much emphasis on user experience and perception (like Apple) pick business partners (such as this one – or one certain Canadian wireless provider company running the GSM network) that suck so much that it ruins this perception ? Are the other companies even worse ? Hard to imagine …


Quote of the day


A gem from Merlin’s twitter feed. I found it being both hilariously funny as well as wildly applicable 😀

There’s nothing wrong with me that couldn’t be fixed by a little exercise, some discipline, and a weekend at the Dog Psychology Center.

Merlin Mann

Great technical screencasts


The http://www.techscreencast.com/ – lots of great content about operating systems, tools, technologies, languages and generally “stuff that matters”(TM).

Recommended …

The (most ?) underappreciated Java pioneers


I still remember back in 2003/2004 when Rod Johnson wrote his books “J2EE Design and Development” and “J2EE programming without EJB” and presented his POJO based inversion of control framework – at that time, still packaged as com.interface21.* – that eventually evolved to Spring Framework.

Idea of composing J2EE application from basic Java Beans, that were instantiated by the core container that managed their lifetime and resolved references was for most people really an eye opening experience, true Aha! moment and completely new world discovery. Everybody I knew was happy and excited about it. I was also happy and excited – not as much because of the novelty, but because of seeing a great design ideas I saw before in closed source implementation to re-appear in open source world.

The place I have seen the excellent embodyment of the “core IoC / DI container” was an application server Dynamo created by company named ATG (Art Technology Group). ATG wrote the DAS (Dynamo Application Server) whose kernel – container named Nucleus was providing very similar services than Spring container. It also provided lot of added values on top of that: personalization layer, scenario server, portal and administration. In 2002, we at Montage have just delivered one major public sector system based on ATG and second even bigger ATG system was well on the way.

Now I am NOT suggesting at all there is any idea transfer between ATG and Spring framework – either way. These design principles were known in research papers since 1980-ies and (as many today’s great trends) originates from Smalltalk. It was only matter of time who will implement it properly in Java and when. Both ATG and Spring, coming from different angles created quite different systems. One is open and free and pretty much accepted standard. The other is way more powerful and mind bogling toolset – in its current form it is probably the most comprehensive and most powerful eCommerce solution in Java space currently available. Alas, it is not widely known, unless you happen to be working in implementing personalized eCommerce sites in 10-100+ million dollar revenue range.

It is very interesting to look at the places where they differ and the consequences of the different decisions for developing in either of the environment. I have decided to publish few blog entries on this, for several reasons:

1) From technology perspective, ATG platform is very interesting and innovative and lots of ideas and design principles used can be very useful in general application design.

2) The company – ATG – is probably one of the most unknown and unappreciated Java innovator and pioneers. These guys more or less invented the JSP in its predecessor form – JHTML. They were very first I have seen to have workable IoC container – back in year 2000 and their ideas of “droplets” and servlet beans certainly made me say “wow!” several times …

3) Talking to developers that came to the ATG platform recently, I have sensed the sentiment “.. yeah, yet another Spring knock-off framework “. I am big admirer of Spring, but let’s face it: ATG certainly did not get any inspiration from Spring, unless they have a time machine hidden somewhere in their Boston HQ. If the idea-crosspolination happened (and I am NOT saying it did – I simply do not know), it could have been only the other way.

4) After using mixture of open source technologies and commercial solutions in quite a few projects of various size (from small to humongous) I gained some experience and appreciation of advantages and weak points of each of them and I’d like to share them.

Before I start, one disclaimer: Thinknostic is ATG partner and has worked on / is actively working on several ATG projects. Obviously, we are interested in success of these projects 🙂 and therefore we do have vested interest in success of ATG as platform and indirectly in success of ATG as a company. We are however not shareholders of ATG stock or do not get any incentives for spreading word or encouraging ATG sales (with obvious exception of somebody buying ATG platform and hiring us to help them with implementation). The sole reason for this and future blog posts is very interesting technology behind it. As you hopefully will see, I will try to be objective and highlight the strengths as well as weaknesses of both solutions – Spring’s as well as the ATG stack.

On positives of negative experience


A comment got to me via friend mentioning why am I suddenly so negative about Apple and Macs, which quite surprised me. True, I have had some serious hardware issues in first two weeks of June, but this negative event was about as much positive experience as hard disk crash can be.

Thinking back what I have learned and discovered from this:

– Time Machine actually works
– it pays to plug in the firewire disk with Time Machine backups every day – the two second operation saves a lot of time in long run
– Carbon Copy Cloner is fantastic tool that makes creating bootable copy of your system disk as easy as possible
– I can easily use multiple bootable disks with various versions of OS-X, not only for backing up but also for trying out new things / installs – a kind of “VM on a disk”

The most pleasant discovery is that separation of system files and user data actually works in OS-X. Before, when I had to reinstall Windows, even when I had backup of my data files, it was always a pain because the only way how to get back customizations of installed applications was to reinstall them and re-customize. If the application supported something like export of customizations (e.g. Eclipse “Export Settings”) or had config files and I was lucky to export these or backup copy after each change, it sort of worked. Sometimes. But if application stored the settings in Registry, good luck. IMHO, if there were a competition for most stupid and disastrous software idea, I bet that Windows Registry would get a medal …

What I did kind of lost trust in, are hard disks, especially high capacity notebook size drives. I am currently reviewing my backup procedures across all systems. I have created bootable clone of my daughter’s Macbook hard drive – just in case and start serious think about buying Drobo later this year.

But on operating system side, I am happily staying with Apple and Macs. It is not perfect solution and is certainly not as rock solid and secure as Apple would like the world to believe – the last year record of security flaws, crowned with latest discovery of first trojan and root access hole in ARD proves it more than enough. But it is still – IMHO – closest thing to that ideal I have seen. To qualify that (before I get email from all my friends that happen to be Linux/BSD/Solaris fanatics enthusiasts: I agree that there are better, faster, safer versions of Unix available – OpenBSD, some Linux distros, etc etc. But using Mac is actually fun and pleasant experience, despite of all shortcomings and you can do with it much more than develop in Java or recompile C programs :-). For example run Photoshop or Textmate – none of which works under Linux.

Therefore – Shane – do not hesitate to get a Mac. If my disk crash story made you reconsider, I am really sorry about that. Coffee sometimes ? Email me.

Quote of the day


I’ve been writing a lot of code for the past 6 months. I have to admit, it is a welcome change from Word documents and PowerPoint presentations. Java, unlike text and graphics has a clearer definition of correct and finished.

From Software Is A Craft by Dan Pritchett

Unit testing debt


I had the pleasure to listen very interesting podcast where Scott Hanselman and Quetzal Bradley discussed unit testing named “Testing after Unit Tests“. To increase the Google Karma of the information discussed I have decided to rehash and sum up few main ideas of this discussion.

Quetzal introduced the idea of “negative coverage” – meaning that if you have 88 % test coverage, you should not see this as something positive you have achieved, but as something missing (you miss 12 % of completion) – thus the title of this post.

He also offered very nice mental model of unit tests: see all possible paths through your code as network of roads in a state. Your unit tests are like taking small car and start driving through these roads. If you go through 88% of the roads, you can at least tell that all these roads and bridges are finished and passable with the small car driving at normal speed, that there are no fallen trees on the road and so on.

You cannot say anything about the remaining 12 % roads and bridges you have not visited. They may not exist at all – or be only half finished. You simply do not know.

It is also important to understand that you do not now how many those 88% tested roads will still be OK when you try to drive through with a 18 wheeler truck – or at 250 km/h in a sports car (feel free to fill in your favorite racing car make …).

The parallel goes even further in matching the “freeways” and side roads with main execution paths vs sideroads (you have to take freeway in order to get to the sideroad) – but to get all, get a podcast, load it to your iPod (or Zune ;-)) to find out more.

I keep listening to Hanselminutes because I like the content and the style and also to keep a tie to Microsoft world during the periods I am working outside of .NET (like in last 10 months). But even if you are not developing in Microsoft environment, many episodes of Hanselminutes very often bring ideas with much wider applicability. This is one of them.