Friday 30 April 2010

Project SUMO / Silverlight for Umbraco Media Objects

This post has moved to http://wishfulcode.com/2010/04/30/project-sumo-silverlight-for-umbraco-media-objects/

Not long ago, I was invited to join a small group tasked, with Microsoft's help, at creating an open source project to provide some tools for the Umbraco community to use which would enhance both users' and developers' experiences with Umbraco.

It was decided that a tool would be built which offers features not implemented in the default asp.net umbraco implementation of its Media section. The idea to enhance the tool with features such as media object editing, bulk saving and uploading, and cross-platform (including mobile) support led us to choosing Silverlight as the application platform to develop with.

Collaboratively, it was an interesting exercise in the use of tools, role-assumption, personal initiative... and maybe some all-nighters.

The project ended up taking on a good project-architecture:
1. Proof of concept. This took the form of an initial Silverlight application with a tree and a list of media items. We wanted to see if what we wanted to achieve on the client-side was quick to develop using Silverlight.
2. SketchFlow. Warren Buckley rapidly prototyped the different controls that would be available in the client app, which allowed the team to discuss issues before they became a reality.
3. Main Architecture & Development.  This is the side I enjoyed the most. We can up with a client-server architecture which exposed media objects as their byte[] data through a WCF service, and an MVVM pattern for interacting with this data inside the silverlight client and binding it to a UI.
4. Advanced Functionality and Skinning. With a solid foundation we are now in a great position to extend the project in order to rapidly gain new features, to build very similar clients for different silverlight platforms (like Windows Phone), and to keep improving the user experience.

The WCF side of things are architected in a way that the client is aware of the data-contract (IUSTFMediaService), and the project contains a default implementation which looks at Umbraco's default media objects (UmbracoDefaultImageMediaService). Therefore, more advanced Umbraco developers can freely make their own implementation of IUSTFMediaService to deal with any custom media document types or architectures without changing anything in the Silverlight application.

 The project will be available as an easy-to-install package for Umbraco, with releases and source code available at the SUMO codeplex site.

I've had the pleasure of working with some great people from the community since the beginning of this project including Darren Ferguson, Warren Buckley, Alex Norcliffe, Adam Shallcross and Will Coleman from Microsoft.

More to come on the user scenarios the app will enable, and some great code practices we found along the way.