UI Design Pattern Resources

knitting

I had a great time at Codestock this year.  It wasn’t the pot-smoking, free-loving, mind-altering tribal experience I was afraid of and I didn’t see a single guitar the entire time – though I did talk with one guitar player.

The organizers – Michael Neel, Alan Stevens and Wally McClure — did a fantastic job and the Knoxville community is quite amazing and enthusiastic.  I also got to meet many people I had previously only known by reputation.

I presented on “The Uses and Abuses of UI Design Patterns” on Saturday afternoon.  I wanted to build out some examples of using a modified MV-VM pattern in WinForms and ASP.NET before publishing the code samples, but wanted to make sure I published out the references from the slide deck.

The point of the references is that while UI design patterns are all plagued by a tendency to have fuzzy boundaries – that is, it can be difficult to compare patterns between different technologies and sometimes can even be difficult to distinguish patterns used in one technology – there is still a paper trail on the Internet that give us clues as to where the design patterns (MVC, MVC Model 2, MVP, SVC, PV, PM, MVVM) came from and how they were originally intended to be used.

In general, the Supervising Controller and Passive View patterns are the best defined, while MVC is perhaps the least well defined.  MV-VM, on the other hand, has some of the best examples on usage – not least because it is so tightly associated with WPF.

1988 – MVC: Journal of Object Oriented Programming Vol 1 Issue 3 http://portal.acm.org/citation.cfm?id=50759&dl=GUIDE&coll=GUIDE&CFID=41635617&CFTOKEN=20661505

1997-99 – MVC Model 2: Java Sun JSP Architecture http://java.sun.com/blueprints/guidelines/…/application_scenarios/index.html

2004 – MVP: Martin Fowler  http://martinfowler.com/eaaDev/uiArchs.html

2004 – Presenter Model  http://martinfowler.com/eaaDev/PresentationModel.html

2006 – Passive View and Supervising Controller: Martin Fowler http://martinfowler.com/eaaDev/ModelViewPresenter.html

2005-09 – MVVM: John Gossman http://blogs.msdn.com/johngossman/archive/2005/10/08/478683.aspx

MVVM: Josh Smith  http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

An additional resource is this site http://c2.com/cgi/wiki?ModelViewControllerHistory from which we learn that the first MVC pattern can be attributed to Trygve Reenskaug sometime in the 70’s.

Perhaps the most authoritative source for the origins of the MVMV pattern, in turn, comes from the WPF MVVM toolkit (available on Codeplex) where we are told:

Model-View-ViewModel (MVVM) is a derivative of MVC that takes advantage of particular strengths of the Windows Presentation Foundation (WPF) architecture to separate the Model and the View by introducing an abstract layer between them: a “Model of the View,” or ViewModel. The origins of this pattern are obscure, but it probably derives from the Smalltalk ApplicationModel pattern, as does the PresentationModel pattern described by Martin Fowler. It was adapted for WPF use by the Expression team as they developed version 1 of Blend. Without the WPF-specific aspects, the Model-View-ViewModel pattern is identical with PresentationModel.

The Hazards of Love in Atlanta

On Wednesday, June 3rd, The Decemberists performed at the Tabernacle in Atlanta.  It’s taken me about the intervening two weeks to fully digest it all.

My friend and colleague, Tim Price-Williams, is a big fan of the Tabernacle and drew out a diagram for me and my wife on where to sit and how to get those seats.  First, we needed to arrive two hours before the doors opened at 7.  Then we were to sit outside the left (not the right, or the far right VIP entrance) doors.  As the doors opened, we needed to proceed to the left and up the stairs to the first balcony.  Tim drew a map of the second balcony and then pointed out the four seats he deemed acceptable, just to the left and the right of center stage and flushed against the forward railing.  Wait an hour for the opening band.  Then wait another hour for the main show.

We messed up Tim’s well laid plans from the get go when I forgot to pick up the baby sitter on the way home from work.  After that we were stuck in remarkably heavy traffic and didn’t find parking until about 6 o’clock.  As we waited in line I made a quick trip across the street to pick up a chicken sandwich at Ted’s Montana Grill for dinner.  I’ve been habituated to fast-food chicken sandwiches for years and was pleasantly surprised to find that the basic recipe can indeed be improved upon.  The line started moving at 6:45 so Tamara and I had to eat quickly.

This is where Tim’s advice came in very handy.  He recommended that we each have our tickets in our hands to be scanned – if one of us fell along the way the other could continue on to the prized seats on the balcony.  Everyone else apparently wanted to stand in front of the stage, so we had no problem getting to the second balcony (we didn’t even realize that there was a first balcony above us) and managed to get two seats a row back from the ones we had coveted. 

The opening band was Blind Pilot (we joked that they were composed of the injured members of Stone Temple Pilots) but it turned out that they are another band from the pacific northwest with an eclectic instrumentation and a folksy/rock feel.  They were really good.  But we were there to hear The Hazards of Love.

The Hazards of Love is a concept album by The Decemberists.  Based on an apparently original Welsh mythology cycle, it was written by lead singer Colin Meloy while in Paris.  It’s received some mixed reviews while the standout songs have been The Rake’s Song and The Wanting Comes in Waves.  Part of the difficulty follows from trying to understand what the songs are about, which is particularly difficult for me since I generally don’t hear lyrics.  Tamara has made some progress in untangling the characters and the events of the songs, however, and during the break between Blind Pilots and The Decemberists she explained quite a bit of it to me.

The Tabernacle, by the way, is a renovated classic movie theater that looks much better with the lights out than with them on.  It is an amazing venue.  The backdrop for the show – gigantic gauze sheets hanging from the ceiling – along with impressive lighting made it even more so.

We didn’t know exactly what to expect since concept albums are typically something done in a studio.  We thought that this would be a modified presentation of some highlights from the album.  Instead it was a full performance of Hazards of Love straight through and faultless.

As the performance progressed, I came to realize that I had fundamentally misunderstood the relationship between the album and the concert.  Normally a concert tour is meant to reproduce an album for fans.  In this case, I slowly realized, the album is just a memento of the concert itself.  I don’t go to that many rock concerts, so it doesn’t mean much when I say it was the best one I’ve seen.  It was, nevertheless, an event that has left a deep impression on me and still stays with me after these weeks.

The core members of The Decemberists were dressed in formal suits for the performance of Hazards.  Shara Worden and Becky Stark, who sing on the album as the Forest Queen and the heroine Margaret, respectively, were dressed in renaissance fair costumes appropriate to the theme.  Shara Worden has the attitude of Joan Jett and the voice of Grace Slick.  Becky Stark was simply ethereal waving her arms about like Elfine Starkadder the whole time.

Again, I have trouble what actually happened during the performance of Hazards itself.  There are large portions of it I can’t even quite remember, and all I have is the strong impression that something amazing occurred.

I do remember that after The Decemberists, Ms. Worden and Ms. Stark finished with Hazards of Love, and after a half-hour intermission, The Decemberists came back out and performed some songs from their previous four albums.  Then Shara Warden and Becky Stark closed the show with a cover of Heart’s “Crazy On You” which I still can’t get out of my head.  For an encore, Colin Meloy constructed a story about the building of the trans-American railway with audience participation while the rest of The Decemberist led a conga-line through the hall.  I also vaguely recall singing Sixteen Military Wives as a round with the floor, the first balcony and the second balcony performing the parts.  The second balcony was clearly the best.

On the drive home I fell into a melancholic mood; I had the sense that some part of me had been sleeping for a long time and that after waking it up I had left it behind at the Tabernacle.  I now find myself replaying The Hazards of Love again and again on my iPod trying to recapture how that lovely night felt.

David Carradine

kungfu

As with many people, the passing of David Carradine has left me quite shaken.  David Carradine, after all, was the reason I got into consulting in the first place.

Kung Fu, the Ed Spielman TV series in which Mr. Carradine played Kwai Chang Cane, a parapatetic Shaolin monk in the American Old West, left a lasting impression on me.  If you are unfamiliar with the series, it revolved around a half-Chinese half-American man trained in Kung Fu helping people out as he travelled from town to town searching for his American relatives, all the time pursued by the Chinese Emperor’s assassins.

It may be hard to believe, but when I found out about the world of Software Consulting, I realized that it was my opportunity to fulfill my childhood dream of living the life of Kwai Chang Cane.  It’s a bit of a stretch, but think about what a consultant does. He travels from company to company assisting them with difficult technical issues they desperately need help to resolve.

Let me say that the reality has been as good as the dream.  In the past year I’ve managed to:

05/08 – 07/08

Upgrade a billing application for a national furniture chain located just off of Jimmy Carter Boulevard from VB6 Forms to an ASP.NET 3.5 application with limited ajax functionality.  In the process, I helped out a group a beleaguered shopkeepers being extorted by local thugs.

08/08 – 09/08

Gather requirements for a POC Silverlight project while investigating why a beautiful roller derby skater was killed.

10/08 – 11/08

Assist in the data migration of an insurance company’s legacy data – horribly denormalized, unindexed and lacking referential integrity – from a Paradox for DOS system to SQL Server 2008.  At the same time I was able to rescue the office manager’s cousin from a Turkish prison where he was incarcerated under trumped up drug trafficking charges.  I was able to do this with some help from friends who are Vietnam vets in hiding from the US government for crimes they didn’t commit.

12/08 – 03/09

Design a reporting framework for a mortgage company going through hard times that heavily leveraged third party charting tools while also arranging a new life for a protected Federal witness — who was testifying against his mobster brother — and help him to visit his sick mother before she died.

04/09

This was a fairly quick gig.  I had to design and build a WPF point-of-sale application for a cruise liner.  During installation of the software I teamed up with a consultant from a rival firm to defuse two sophisticated bombs aboard the cruise ship while overcoming our mutual animosity and learning to work together and ultimately develop an abiding respect for one another’s abilities.

05/09

I had some down time in June, so I reminisced about my adventures to my colleagues clip-show style while preparing for a certification exam.

If this makes consulting out to be something glamorous, I want to make it clear that this is not always the case – for instance the time I had to scrub crystal reporting data for a client or the time I had to hunt down oversized alligators in the sewers because they were eating neighborhood pets.  But between those times there can, indeed, be quite a bit of excitement. 

Consulting is definitely not for everyone.  It takes a certain mentality, a certain desire to not have the same routine every day, and of course it never hurts if you have the ability to make plastic explosives out of a matchbox and a stick of spearmint gum or can deploy a multi-tier application with only a command line utility and the spring from a ballpoint pen.

At least I look forward to coming in to work each day knowing that there will be something new and unexpected to make it different from the day before.

And I have David Carradine to thank for setting me on this path.