This post is part of the Silverlight HyperVideo Platform documentation
[Updated 1/5 10:50 GMT-5]
Everything Flows, Nothing Stands Still – Plato
Nothing Endures, But Change – Diogenes
The past few days have seen quite a flurry of design activity, and I’m quite sure some folks who have been following closely have been confused. This note will clarify, and also discuss design decisions made to move the project forward, and why these decisions were made. I have created a new discussion on the CodePlex site and I would invite your comments and feedback there, if that is convenient for you.
- Build a HyperVideo player which would provide a better way to play our instructional (How Do I) videos and
- Annotate the process from design to completion in a series of blog posts, as a way to discuss virtually every aspect of Silverlight
OpenSource and CodePlex
We decided to move the project to CodePlex (which took a few months to get licensed) and open the project up to community involvement. This is a wonderful thing, and has created unanticipated opportunities.
My perspective on this project, buttressed by management expectations, is to foster as much community contribution as possible, but to take personal responsibility for every line of code in the project, to set coding standards, and so forth.
The project is being built with MEF which makes it composible and extensible. I envision 6 classifications for code created by the community
- Code accepted into the core project (process has been detailed on the Developer Page.
- Code accepted into the plug-in extensions within the project
- Code that needs further work to meet coding standards but we anticipate accepting
- Modules that have been rejected as inconsistent with the project, but which can be housed outside of the project (even on another CodePlex project)
- Modules that a person or company develops intending to make them proprietary but to work with the project.
Key to this is that the first two represent code that will be in a release from the project, and the fifth option is open to any organization, commercial or otherwise, so long as they follow the Ms-PL license.
The Contributions and Influence of WL
As you may know, we have a commitment from WL (an e-learning startup) for 100 hours/week of developer time. They already have some code working that they are interested in adapting to this project and contributing to the core. Their stated intention is to contribute all this work into Ms-PL licensed code housed on CodePlex and also to try to build a product or products using the SLHVP as the engine. That, as I read the Ms-PL is more than appropriate.
Two concerns comes to mind, and this was surfaced by WL itself from day 1:
- Will they distort the project to meet their own needs in a way that either precludes a more general use or freights the code with only tangentially relevant parts and/or
- Will they add complexity that we otherwise would not have
After working carefully with them and examining what they need and want, and what will be best for the project, I can unequivocally answer no to #1 and I can give a more nuanced answer to #2.
The short version is that they bring a more complex design, and with it they bring far greater flexibility and mission-appropriate features. Thus, yes, the project will end up more complex with their involvement, but it will not end up with unneeded or irrelevant complexity. To be specific, all the additional complexity will be in service to features that are appropriate for the project.
Expanding the Scope
This would not work if I were to cling to an initial limited vision of the product, but it works great if we lift our vision a little higher.
I had a boss who said (paraphrasing): “If the railroad companies had realized they were not in the rail business but the transportation business, we’d all be flying Union Pacific Airways.”
One very important aspect of my role in Microsoft is to provide “educational material” such as videos and mini-tutorials, but an arguably more important job is to explore new ways of conveying this information that greatly enhance customer satisfaction and involvement. That can be done by responding to user-suggestions and concerns (which we try hard to do) and also by exploring relatively radical new ways of conveying this information.
The Silverlight HyperVideo Platform
Over the past couple weeks the project has been re-conceptualized in somewhat broader terms, as evidenced by the new summary statement:
|The SLHVP is an extensible HyperVideo platform to orchestrate media, data, user-experiences, and social-interaction into compelling applications.|
What this means is that the SLHVP now anticipates providing more than just video and web links, but also, over time, animation and possibly interactive elements. To accomplish this, we are working towards the following key aspects of the design; most of which should be in place by the January 20 release
- The application is a shell that loads its components via MEF
- Each component stands alone, is configured from its own xml file
- All configuration information is provided from one or more databases using WCF RIA Services
- Each component publishes its events, and each event provides information for consuming modules in a class derived from EventArgs
- Event management will be mediated by a class associated with the application; we are exploring Prism’s EventAggregator
- Each component consumes those events that are of interest to it
We have identified the following modules for the first release
- The Viewer – responsible for instantiating Frames
- Frames are a way to display one or more control within the viewer – full design to come soon
- The Derived SMF video player – essentially the SMF player adapted to work within our architecture
- This will be the primary way to display videos
- Frame will support a “Location Reached” event that can be triggered by (among other things) We will need to handle the following occurrences and others much like them [updated 1/5 – please see this discussion]
- An injected marker being reached
- A marker being reached
- A position (elapsed time) in the video being reached
- A location event from within a frame being fired
- The ItemsListView that displays all the items that will be displayed in this session (this could be a single video, a series of videos, etc.) The ItemListView will be subclassed to allow for various types of lists, including ordered lists and maps. For V1 we will most likely have just an ordered list (display video a, b, c in that order)
- The PostiionListView – either a stand alone module/viewer or one combined with the ItemsListView that allows seeking to specific locations within an item – this would be used, for example to seek to a specific topic within a video
- The LinksView – some items (notably videos) will have a set of links that will either appear all at once or, more likely, as the topic they relate to is mentioned in the Frame. These links will, typically, pause the current frame and cause a new frame to be created – e.g., will open a new video or a web page, or animation, etc.
The current (not yet released) code has a single xml file for creating all of these modules, but even if that is what we release on Jan 20, by early February each module will have its own configuration file. The format for these files will be well-established, and we’ve nearly finalized that already. [updated 1/5 – please see this discussion]
As the first set of code comes from WL and our other contributors I will expand upon these descriptions and update our feature and task list accordingly.
Thank you all for your ongoing support and patience as we sort this out. I anticipate a great burst of productivity over the next six weeks or so. Please be sure to see the newly updated schedule.