<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jesse Liberty &#187; HVP</title>
	<atom:link href="http://jesseliberty.com/Tags/hvp/feed/" rel="self" type="application/rss+xml" />
	<link>http://jesseliberty.com</link>
	<description>Code To Live. Live To Code.</description>
	<lastBuildDate>Tue, 31 Jan 2012 17:18:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Next Open Source WP7-based Project</title>
		<link>http://jesseliberty.com/2010/09/14/next-open-source-wp7-based-project/</link>
		<comments>http://jesseliberty.com/2010/09/14/next-open-source-wp7-based-project/#comments</comments>
		<pubDate>Tue, 14 Sep 2010 19:02:01 +0000</pubDate>
		<dc:creator>Jesse Liberty</dc:creator>
				<category><![CDATA[HyperVideo Player]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Patterns & Skills]]></category>
		<category><![CDATA[Tools and Utilities]]></category>
		<category><![CDATA[BestPractices]]></category>
		<category><![CDATA[HVP]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[WindowsPhone]]></category>

		<guid isPermaLink="false">http://jesseliberty.com/2010/09/14/next-open-source-wp7-based-project/</guid>
		<description><![CDATA[Yes, indecision is a bad thing, except when its not.&#160; The delay in re-starting my open source project has afforded me the opportunity to think of a number of alternative projects that might very well provide more (or more interesting) &#8230; <a href="http://jesseliberty.com/2010/09/14/next-open-source-wp7-based-project/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://jesseliberty.com/wp-content/uploads/2010/09/iStock_3elevatorsLarge.jpg"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 30px 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="iStock_ 3 elevators Large" border="0" alt="iStock_ 3 elevators Large" align="left" src="http://jesseliberty.com/wp-content/uploads/2010/09/iStock_3elevatorsLarge_thumb.jpg" width="240" height="160" /></a> Yes, indecision is a bad thing, except when its not.&#160; The delay in re-starting <a href="http://slhvp.com" target="_blank">my open source project</a> has afforded me the opportunity to think of a <strong>number of alternative projects</strong> that might very well provide more (or more interesting) exploration of Windows Phone 7.&#160; </p>
<p>Among the possible projects are:</p>
<p> <span id="more-3549"></span>
<ul>
<li><strong>HVP</strong> ported to the phone</li>
<li><strong>InReferenceTo.me</strong> – all about my day – who i talked to, what I listened to, etc.</li>
<li><strong>SilentHere</strong> – preset the places I want the phone to be very quiet (movie theaters, schools etc.) and have it automatically go quiet there</li>
<li><strong>AudioNoteToMe</strong> – one button press to start an audio note, one button press to save it and email it to me.</li>
<li><strong>LocatonTag – </strong>uses location services to know where you and other players are.&#160; If I take your picture before you take mine then I “got” you and you can no longer <em>get</em> me.&#160; He who <em>gets</em> the most players wins.&#160;&#160; Can be massively multi-player and international, over an extended period of time.&#160; </li>
<li><strong>What’s That?</strong> – point your camera at a building, and get back information on the building, architecture, etc.&#160; Point it at a tree, find out what kind of tree it is.&#160; Point it at a bird… </li>
<li><strong>Location Based Todo Reminder – </strong>Read todos from an on line service (Toodledo?) and pick out the ones that are location dependent.&#160; When you come within x meters of that location, hear a reminder.</li>
</ul>
<p>&#160;</p>
<p>&#160; The project is scheduled to begin November 1. <font color="#ff0000"><strong>If you intend to participate in the open source project, </strong></font><em><font color="#ff0000"><strong>please leave comments as to which of these projects seems most promising to you</strong></font>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://jesseliberty.com/2010/09/14/next-open-source-wp7-based-project/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>The Open Source Project Spec: With Reference To Me</title>
		<link>http://jesseliberty.com/2010/08/26/the-open-source-project-spec-with-reference-to-me/</link>
		<comments>http://jesseliberty.com/2010/08/26/the-open-source-project-spec-with-reference-to-me/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 21:03:00 +0000</pubDate>
		<dc:creator>Jesse Liberty</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[HyperVideo Player]]></category>
		<category><![CDATA[WindowsPhone]]></category>
		<category><![CDATA[HVP]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://jesseliberty.com/2010/08/27/the-open-source-project-spec-with-reference-to-me/</guid>
		<description><![CDATA[http://WithReferenceTo.Me The application that we&#8217;ll be developing in the next phase of the HVP will allow the user to record and then look up everything that happened from day to day. With this application, each day you can record: Music &#8230; <a href="http://jesseliberty.com/2010/08/26/the-open-source-project-spec-with-reference-to-me/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h1><a href="http://WithReferenceTo.Me">http://WithReferenceTo.Me</a></h1>
<p><a href="http://jesseliberty.com/wp-content/uploads/2010/08/golden_ball_3_iStock_000008619033XSmall.jpg"><img style="margin: 10px 20px 10px 0px; display: inline; border-width: 0px;" title="stand out from the crowd" src="http://jesseliberty.com/wp-content/uploads/2010/08/golden_ball_3_iStock_000008619033XSmall_thumb.jpg" border="0" alt="stand out from the crowd" width="240" height="159" align="left" /></a></p>
<p>The application that we&#8217;ll be developing in<a href="http://withreferenceto.me" target="_blank"> the next phase of the HVP</a> will allow the user to record and then look up everything that happened from day to day.</p>
<p><span id="more-3279"></span></p>
<p>With this application, each day you can record:</p>
<ul>
<li>Music you listen to</li>
<li>Pictures you take</li>
<li>Who you sent and received email from</li>
<li>Who you chatted with</li>
<li>Where you were and where you went</li>
<li>Notes you make about the day</li>
<li>Accomplishments</li>
<li>Insights and ideas</li>
<li>People you meet…</li>
</ul>
<p>you get the idea.</p>
<p>Some of this is recorded automatically for you while the application is running. Some you enter. Some will be manual today with a goal of making it automated in future versions.  The data you record will be local to your phone unless you choose to upload it to the (to be created) web site.</p>
<h3>Plus ça change&#8230;</h3>
<p>Yes, this is a change in the vision for the next phase, but I think it will better illustrate</p>
<ul>
<li>The phone functionality</li>
<li>Transmedia Storytelling</li>
<li>Coding for WP7</li>
</ul>
<h3>Development Schedule</h3>
<table border="0" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td width="358" valign="top"><strong>Item</strong></td>
<td width="142" valign="top"><strong>Working Due Date</strong></td>
</tr>
<tr>
<td width="358" valign="top">Graphic Design</td>
<td width="142" valign="top">October 29</td>
</tr>
<tr>
<td width="358" valign="top">Initial MVVM Design</td>
<td width="142" valign="top">October 29</td>
</tr>
<tr>
<td width="358" valign="top">Begin coding and unit tests</td>
<td width="142" valign="top">October 29</td>
</tr>
<tr>
<td width="358" valign="top">First release</td>
<td width="142" valign="top">November 20</td>
</tr>
<tr>
<td width="358" valign="top">Interim release</td>
<td width="142" valign="top">December 3</td>
</tr>
<tr>
<td width="358" valign="top">Interim Release</td>
<td width="142" valign="top">December 17</td>
</tr>
<tr>
<td width="358" valign="top">Code Complete – Alpha</td>
<td width="142" valign="top">January 2</td>
</tr>
<tr>
<td width="358" valign="top">Bugs Fixed – Beta</td>
<td width="142" valign="top">January 9</td>
</tr>
<tr>
<td width="358" valign="top">Release Candidate</td>
<td width="142" valign="top">January 16</td>
</tr>
<tr>
<td width="358" valign="top">First Release</td>
<td width="142" valign="top">Feb13, 2011</td>
</tr>
</tbody>
</table>
<p>NB: due to scheduling conflicts, this is a 1 month delay in the project.</p>
<div class="wlWriterHeaderFooter" style="margin: 0px; padding: 0px 0px 0px 0px;">This work is licensed under a <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons  license.</a></div>
]]></content:encoded>
			<wfw:commentRss>http://jesseliberty.com/2010/08/26/the-open-source-project-spec-with-reference-to-me/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Creating An Open Source WP7 Application</title>
		<link>http://jesseliberty.com/2010/08/17/creating-a-complete-open-source-windows-phone-7-application/</link>
		<comments>http://jesseliberty.com/2010/08/17/creating-a-complete-open-source-windows-phone-7-application/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 14:04:00 +0000</pubDate>
		<dc:creator>Jesse Liberty</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Essentials]]></category>
		<category><![CDATA[HyperVideo Player]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[WindowsPhone]]></category>
		<category><![CDATA[HVP]]></category>

		<guid isPermaLink="false">http://jesseliberty.com/2010/08/17/creating-a-complete-open-source-windows-phone-7-application/</guid>
		<description><![CDATA[There has been some thrashing about the HyperVideo player.  This note is both an update and an invitation for you to participate. The Fate of the HVP Phase I of the HyperVideoPlayer project was completed in March. Phase II had &#8230; <a href="http://jesseliberty.com/2010/08/17/creating-a-complete-open-source-windows-phone-7-application/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>There has been some thrashing about the HyperVideo player.  This note is both an update and an invitation for you to participate.</p>
<p><span id="more-3200"></span></p>
<p><strong>The Fate of the HVP</strong></p>
<p>Phase I of the <a href="http://slhvp.com">HyperVideoPlayer</a> project was completed in March. Phase II had been delayed while   The conclusion is that I&#8217;ll be working with the program managers who own the MSDN and *.net site players to integrate HyperVideo over the next few months. This will be a branch from the open source project.</p>
<p>The HVP Open Source project (<a href="http://slhvp.com">http://slhvp.com</a>) itself, however will move forward with a Windows Phone 7 component.   Rather than port the existing player, we will follow the ideas of <a href="http://jesseliberty.com/2010/06/17/silverlight-as-a-transmedia-platform/">Transmedia Storytelling</a> and create a stand-alone application that, ideally, when combined with the HVP will make for an enhanced experience.</p>
<p>A full spec will follow,but for now, here is a top level outline of what we will design and build. You are very much encouraged to sign up on <a href="http://slhvp.com">http://slhvp.com</a> to participate.  (Create an account and then add yourself under <em>People</em> – if you run into difficulty, please send me an <a href="mailto:jesseliberty@jesseliberty.com">email</a>)</p>
<h3>The Vision</h3>
<h5>The application allows you to take fast notes, by text, image, potentially video, and email it with one touch to one of a set of known locations.</h5>
<p><strong>Working Title:</strong> <strong>OneTouchIt</strong></p>
<h3><strong>Modes</strong></h3>
<p>The application is divided into two modes</p>
<ul>
<li>Setup/ Configuration</li>
<li>Usage</li>
</ul>
<h4><strong>Setup/Configuration</strong></h4>
<p>Setup/ Configuration has forms for filling in one or more email addresses, one or more subjects and other user-specific information</p>
<h4><strong>Usage</strong></h4>
<p>The typical use case is for there to be a large blue button that says “Record”  (and in the corner, a much smaller <em>i</em> in a circle for more information and to reach the configuration<em>. </em></p>
<p>Pressing Record opens a recorder, with a large green  button that both is clickable and that also shows a volume meter.</p>
<p>Pressing the button once turns it yellow and the meter disappears and the word PAUSED appears.  Click again to resume.</p>
<p>Double clicking turns the button blue (ready for the next recording) and opens email. Email is prefilled with the first name in your list from configuration and with the first subject in your list from subjects. The body of your message is your recorded note.</p>
<p>In version HVP WP7 1  you can, on the first page (blue button) select Voice, Note or Image, and the configuration screen allows you to set one as default.</p>
<h3>Development Schedule</h3>
<table border="0" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td width="358" valign="top"><strong>Item</strong></td>
<td width="142" valign="top">Working Due Date</td>
</tr>
<tr>
<td width="358" valign="top">Graphic Design</td>
<td width="142" valign="top">September 29</td>
</tr>
<tr>
<td width="358" valign="top">Initial MVVM Design</td>
<td width="142" valign="top">September 29</td>
</tr>
<tr>
<td width="358" valign="top">Begin coding and unit tests</td>
<td width="142" valign="top">September 29</td>
</tr>
<tr>
<td width="358" valign="top">First release</td>
<td width="142" valign="top">October 20</td>
</tr>
<tr>
<td width="358" valign="top">Interim release</td>
<td width="142" valign="top">November 3</td>
</tr>
<tr>
<td width="358" valign="top">Interim Release</td>
<td width="142" valign="top">November 17</td>
</tr>
<tr>
<td width="358" valign="top">Code Complete – Alpha</td>
<td width="142" valign="top">December 2</td>
</tr>
<tr>
<td width="358" valign="top">Bugs Fixed – Beta</td>
<td width="142" valign="top">December 9</td>
</tr>
<tr>
<td width="358" valign="top">Release Candidate</td>
<td width="142" valign="top">December 16</td>
</tr>
<tr>
<td width="358" valign="top">First Release</td>
<td width="142" valign="top">Jan 13, 2011</td>
</tr>
</tbody>
</table>
<p>NB: I am on vacation or traveling for work the weeks of October 26, November 8, 22 29, December 20, 27 and January 3</p>
]]></content:encoded>
			<wfw:commentRss>http://jesseliberty.com/2010/08/17/creating-a-complete-open-source-windows-phone-7-application/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>HyperVideo &amp; Windows Phone 7 Project Update</title>
		<link>http://jesseliberty.com/2010/06/23/hypervideo-windows-phone-7-project-update/</link>
		<comments>http://jesseliberty.com/2010/06/23/hypervideo-windows-phone-7-project-update/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 18:12:39 +0000</pubDate>
		<dc:creator>Jesse Liberty</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[WindowsPhone]]></category>
		<category><![CDATA[z Silverlight Archives]]></category>
		<category><![CDATA[BestPractices]]></category>
		<category><![CDATA[HVP]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://jesseliberty.com/2010/06/23/hypervideo-windows-phone-7-project-update/</guid>
		<description><![CDATA[&#160; This is a quick update on the next steps for the HyperVideo Project that will touch on the following three sub-projects scheduled to be completed in the next six months: Update to the web-based project (HVP v2) Initial “port” &#8230; <a href="http://jesseliberty.com/2010/06/23/hypervideo-windows-phone-7-project-update/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://jesseliberty.com/wp-content/uploads/2010/06/HVPWp7v1.jpg"><img style="border-bottom: 0px; border-left: 0px; margin: 10px 15px 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="HVPWp7v1" border="0" alt="HVPWp7v1" align="left" src="http://jesseliberty.com/wp-content/uploads/2010/06/HVPWp7v1_thumb.jpg" width="126" height="240" /></a> </p>
<ul>
<p>&#160;</p>
<p>This is a quick update on the next steps for the HyperVideo Project that will touch on the following three sub-projects scheduled to be completed in the next six months:</p>
</ul>
<ul></ul>
<li>
<p>Update to the web-based project (HVP v2)</p>
</li>
<li>
<p>Initial “port” of the HVP to Windows Phone 7&#160; (HVP/WP7 v1)</p>
</li>
<li>
<p>Transmedia inspired WP7 application (HVP/WP7 v2)</p>
</li>
<ul>
<ul></ul>
<ul>and how you can follow and/or participate in these projects.</ul>
</p>
</ul>
<p> <span id="more-2756"></span><br />
<h3>HVP Version 2 – Updating the video player</h3>
</p>
<p>This goal of this short project is to upgrade the HVP to incorporate the SMF v2, integrate user feedback, and to enable the HVP to serve as the media player for Silverlight.net and potentially many other Microsoft sites.&#160; </p>
<p>The <a href="http://silverlighthvp.codeplex.com/wikipage?title=Version2&amp;referringTitle=Documentation" target="_blank">overview of the plan</a> is posted in the Silverlight HyperVideo Platform Codeplex site (<a href="http://slhvp.com">http://slhvp.com</a>) as is the <a href="http://silverlighthvp.codeplex.com/wikipage?title=ReleaseSchedule2&amp;referringTitle=Documentation" target="_blank">release schedule</a>. </p>
<p>While this update will incorporate much of the open source work (and some of the new work will be open source as well) most of the update will be proprietary to Microsoft as it will involve supporting internal meta-data that would not be of interest to other programmers.</p>
<p>While this project is underway, however, the main thrust of the open source work will be on:</p>
<h3>HVP/WP7 Version 1 – Porting The HyperVideo Player to Windows Phone 7</h3>
<p>The very first version of the Windows Phone 7 HVP application will be a port of much of the functionality available on the web.&#160; </p>
<p>The <a href="http://silverlighthvp.codeplex.com/wikipage?title=Version2&amp;referringTitle=Documentation" target="_blank">overview of the plan</a> is posted in the Silverlight HyperVideo Platform Codeplex site (<a href="http://slhvp.com">http://slhvp.com</a>) as is the <a href="http://silverlighthvp.codeplex.com/wikipage?title=ReleaseSchedule2&amp;referringTitle=Documentation" target="_blank">release schedule</a>. </p>
<p>This project will be open-source and I’m hoping to have significant community involvement. Even while this is being completed, however, we’ll launch its successor:</p>
<h3>HVP/WP7 Version 2 – A Transmedia-inspired application</h3>
<p>Following through on the ideas presented in my recent post, <a href="http://jesseliberty.com/2010/06/17/silverlight-as-a-transmedia-platform/" target="_blank">Silverlight As A Transmedia Platform</a>, we will design and implement a stand-alone <a href="http://developer.windowsphone.com/windows-phone-7-series/" target="_blank">Windows Phone 7</a> application that, when coupled with the web-based HVP is mutually enhancing</p>
<p>The <a href="http://silverlighthvp.codeplex.com/wikipage?title=Version2&amp;referringTitle=Documentation" target="_blank">overview of the plan</a> is posted in the Silverlight HyperVideo Platform Codeplex site (<a href="http://slhvp.com">http://slhvp.com</a>) as is the <a href="http://silverlighthvp.codeplex.com/wikipage?title=ReleaseSchedule2&amp;referringTitle=Documentation" target="_blank">release schedule</a>. </p>
<p>&#160;</p>
<p>[ NB: Depending on the level of community involvement, these timelines are very much subject to revision ]</p>
]]></content:encoded>
			<wfw:commentRss>http://jesseliberty.com/2010/06/23/hypervideo-windows-phone-7-project-update/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Silverlight HVP &#8211; Next Steps and Community Involvement</title>
		<link>http://jesseliberty.com/2010/05/10/silverlight-hvp-next-steps-and-community-involvement/</link>
		<comments>http://jesseliberty.com/2010/05/10/silverlight-hvp-next-steps-and-community-involvement/#comments</comments>
		<pubDate>Mon, 10 May 2010 15:23:53 +0000</pubDate>
		<dc:creator>Jesse Liberty</dc:creator>
				<category><![CDATA[HyperVideo Player]]></category>
		<category><![CDATA[z Silverlight Archives]]></category>
		<category><![CDATA[BestPractices]]></category>
		<category><![CDATA[HVP]]></category>
		<category><![CDATA[WindowsPhone]]></category>

		<guid isPermaLink="false">http://jesseliberty.com/2010/05/10/silverlight-hvp-next-steps-and-community-involvement/</guid>
		<description><![CDATA[The Silverlight HyperVideo project ran full steam from January through the day before Mix, and then went on hiatus while we all recovered, and while I pondered three critical questions: What features and changes are needed to bring the HVP &#8230; <a href="http://jesseliberty.com/2010/05/10/silverlight-hvp-next-steps-and-community-involvement/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://slhvp.com" target="_blank">Silverlight HyperVideo project</a> ran full steam from January through the day before Mix, and then went on hiatus while we all recovered, and while I pondered three critical questions:</p>
<ul>
<li>What features and changes are needed to bring the HVP up to the point that we can offer it for use by Silverlight.net and related sites (version 1.1)</li>
<li>How do we involve volunteer developers from the community more successfully?</li>
<li>What is in the next release (version 2)</li>
</ul>
<p><span id="more-2033"></span></p>
<p>I’m pleased to announce that we’re ready to resume development. The features for version 1.1 are now listed as ready for development in our <a href="http://slhvp.leankitkanban.com/" target="_blank">Kanban</a> board, however I no longer have an accurate picture of which developers would like to be involved.</p>
<p><strong>If you are already listed as a developer/contributor and wish to continue, please send me an email.  I’ll be purging that list in a week.</strong></p>
<p>If you are interested in participating and are not yet signed up, please go to the <a href="http://silverlighthvp.codeplex.com/wikipage?title=TheDeveloperPage" target="_blank">developer page</a>, follow the directions in the How Do I Contribute link, and read through the rest of the developer page and then as much as you can of the rest of the documentation.</p>
<p>The key tasks &amp; features for version 1.1 include</p>
<ul>
<li>Making the application more self-revealing</li>
<li>Showing the scrubber and its movement when changing topics</li>
<li>Breadcrumbs so that you can follow a link and find your way back</li>
<li>Topics light up as they are reached while the video plays</li>
</ul>
<p>The key tasks and features for version 2 are divided among feature additions for the existing HVP (e.g., upgrading to version 2 of the player, adding additional modules) and creating (first) a port of the application to Windows Phone 7.</p>
<p>I have a number of ideas about how to smooth the path for contributing community members, but the first step is finding out who is interested. </p>
]]></content:encoded>
			<wfw:commentRss>http://jesseliberty.com/2010/05/10/silverlight-hvp-next-steps-and-community-involvement/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>An Annotated Line of Business Application</title>
		<link>http://jesseliberty.com/2010/04/01/an-annotated-line-of-business-application/</link>
		<comments>http://jesseliberty.com/2010/04/01/an-annotated-line-of-business-application/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 02:29:50 +0000</pubDate>
		<dc:creator>Jesse Liberty</dc:creator>
				<category><![CDATA[HyperVideo Player]]></category>
		<category><![CDATA[Mini-Tutorial]]></category>
		<category><![CDATA[HVP]]></category>

		<guid isPermaLink="false">http://jesseliberty.com/2010/04/01/an-annotated-line-of-business-application/</guid>
		<description><![CDATA[The Silverlight HyperVideo Player has met with strong support and interest. This mini-tutorial is the first in a series that will walk through the design and delivery of this project. This series will pretend that the design existed before we &#8230; <a href="http://jesseliberty.com/2010/04/01/an-annotated-line-of-business-application/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://jesseliberty.com/wp-content/uploads/2010/04/MiniTutorialLogo.jpg"><img style="display: inline; border-width: 0px;" title="MiniTutorialLogo" src="http://jesseliberty.com/wp-content/uploads/2010/04/MiniTutorialLogo_thumb.jpg" border="0" alt="MiniTutorialLogo" width="244" height="73" /></a></p>
<p>The <a href="http://silverlight.net/getstarted/slhvp" target="_blank">Silverlight HyperVideo Player</a> has met with strong support and interest. This <a href="http://silverlight.net/learn/tutorials/mini/1/">mini-tutorial</a> is the first in a series that will walk through the design and delivery of this project.</p>
<table border="0" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td width="400" valign="top">This series will pretend that the design existed before we began coding, and will not take you through its evolution over the months between December 2009 and March 2010. In short, this series is a “drop-line” exercise highlighting how the program works with a focus on teasing out general principles of creating mid-sized line of business Silverlight applications.</td>
</tr>
</tbody>
</table>
<h3>Understanding the Silverlight HVP</h3>
<p>If a picture is worth a thousand words, a video must be worth an order of magnitude more. <a href="http://jesseliberty.com/wp-content/uploads/2010/03/HyperVideoOverview.wmv" target="_blank">This video</a>, created as part of the HVP sample set, explains the concepts behind the HVP.</p>
<h3>Design Guidelines</h3>
<p>I’m a big believer in diving right into the code, but I did want to mention just a few of the design/coding guidelines I imposed on myself when writing this, and we can explore their motivation, implications and outcome as we go:</p>
<p><strong>Overarching message of the code: Silverlight is an application development framework: treat it like one.</strong></p>
<ul>
<li>Write <a href="http://jesseliberty.com/book-reviews/book-review-clean-code-by-uncle-bob-martin/" target="_blank">Clean Code</a></li>
<li>Use Test Driven Development</li>
<li>Let the Design Emerge</li>
<li>Understand that the first version is just the launching point for subsequent versions</li>
<li>Community involvement (including design and coding) should grow over time</li>
<li>When possible, illustrate “best practices”</li>
</ul>
<h3>Getting Started</h3>
<p>The premise of agile programming dove-tails neatly with the approach I’ve been advocating for two decades: <em>get it working and keep it working</em>.  I can’t claim any high minded values behind this; it is just what works for me. Worse, it is what I end up doing, even when I’m supposed to be doing design-first.  I simply can’t design in a vacuum and I get very tired and crabby when I do try to design in advance because it doesn’t work. It <em>never </em>works because</p>
<ul>
<li>I learn more about how I want the design to be as I write code</li>
<li>Requirements change</li>
<li>The bigger the design, the more likely I am to get it wrong</li>
<li>Requirements change</li>
<li>The bigger the design, the more reluctant I am to change it</li>
<li>And requirements change</li>
</ul>
<p>The old argument was “don’t paint yourself into a corner.”  On reflection, what I found was I was <em>always</em> painting myself into corners, but if I only painted for a few minutes before fixing the problem I was a lot better off than if I’d spent all day at it.</p>
<h3>Emerging Design</h3>
<p>I love the term <em>emerging design</em> because it sounds so much better than “figure it out as you go.”</p>
<p>We’ll come back to the most effective technique I know of for making all this work in large complex applications when we talk later about Test Driven Design, but let’s get started.  Here is what I know:</p>
<ul>
<li>I want the program to be created from independent components, and <a href="http://mef.codeplex.com" target="_blank">MEF</a> will provide a great solution to that.  <a href="http://mef.codeplex.com" target="_blank">MEF</a> is non-trivial, however and I don’t want to deal with anything that complex until I have something working.</li>
<li>Creating a media player is lots of fun, lots of folks have done it, most of the implementations suck. There are Microsoft folks working on an <a href="http://smf.codeplex.com/" target="_blank">open source solution</a> (The <a href="http://smf.codeplex.com/" target="_blank">Silverlight Media Framework</a> that they, for some bizarre reason, refer to as the “Smurf”) that not only doesn’t suck (except its acronym) but is really good.  <strong>Let’s use that. </strong></li>
<li>MVVM is hot stuff.  Moreover, it’s hot stuff for all the right reasons. <strong>Let’s use that.</strong></li>
</ul>
<h3>The First Thing To Get Working</h3>
<p>One of the premises of “Emerging Design” that I like  a lot is this: <strong>don’t design anything until you’re going to implement it</strong>.  Do <em>not</em> say to yourself “I know I’m going to need this, so let me put in all the hooks I’ll need.”  Reason: when you predict what you’ll need, you are usually wrong. Work done today does not save you work later, but work not done today may never need to be done at all.</p>
<p>In that spirit, the first thing to do is to create an application that has the <a href="http://smf.codeplex.com/" target="_blank">Silverlight Media Framework</a> player in it, and get that working in a very simple page.</p>
<table border="2" cellspacing="2" cellpadding="3" width="500">
<tbody>
<tr>
<td width="516" valign="top">I’m going to re-create the source bit by bit, and make that incremental source available with each <a href="http://silverlight.net/learn/tutorials/mini/1/">mini-tutorial</a> (see bottom of this posting)  but please understand that these are <em>not</em> the versions that I created the first time. I’ve condensed the process here to facilitate focusing on what matters, and to reduce confusion. You can find all my dead-ends, mistakes and changes of heart enshrined in the source code history <a href="http://silverlighthvp.codeplex.com/SourceControl/list/changesets" target="_blank">here</a>.</td>
</tr>
</tbody>
</table>
<p>Since adding a SMF is a well documented and short set of steps, I’ll just take my lead from the <a href="http://smf.codeplex.com/documentation" target="_blank">SMF documentation</a> and create a simple Silverlight Application named HVPT1 (Tutorial 1). That will create two projects: HVPT1 and HVPT1.web.  The startup project will be HVPT1.web, the startup page will be <em>HVPT1TestPage.aspx</em> and the first Silverlight page will be in the HVPT1 (client side) project, the file mainpage.xaml</p>
<h3>Getting the SMurF Libraries</h3>
<p>For the SMF to work, we need the four SMF libraries, which can be downloaded from <a href="http://smf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=35773#DownloadId=92676" target="_blank">here</a>, as well as the <em>IIS Smooth Streaming Player Development Kit</em> which is available <span class="removed_link">here</span>.  The Smooth Streaming Player Development Kit (SSPDK) is unpacked by double clicking on the downloaded .exe.  Place all five DLLs (the four from the SMF and the unpacked SSPDK into the same directory.</p>
<p>In HVPT1 add a reference to all the DLLs except <em>SilverlightMediaFramework.data.dll </em>and then replace the header of HVPT1.MainPage.xaml with the following:</p>
<pre class="brush: xml; auto-links: false; highlight: [2];">&lt;UserControl x:Class="HVPT1.MainPage"
    xmlns:p="clr-namespace:Microsoft.SilverlightMediaFramework.Player;assembly=Microsoft.SilverlightMediaFramework.Player"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignWidth="640"
    d:DesignHeight="480"&gt;</pre>
<p>Note that the second line declares a namespace alias “p” that refers to the Microsoft.SilvelrightMediaFramework.Player.  You can now declare the player and its source, which must be a streaming media file. Here’s the entire .xaml file:</p>
<pre class="brush: xml; auto-links: false; highlight: [11,12,13,14,15,16,17,18];">&lt;UserControl x:Class="HVPT1.MainPage"
    xmlns:p="clr-namespace:Microsoft.SilverlightMediaFramework.Player;assembly=Microsoft.SilverlightMediaFramework.Player"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignWidth="640"
    d:DesignHeight="480"&gt;

    &lt;Grid
        x:Name="LayoutRoot"&gt;
        &lt;p:Player&gt;
            &lt;p:CoreSmoothStreamingMediaElement
                AutoPlay="True"
                SmoothStreamingSource="http://video3.smoothhd.com.edgesuite.net/ondemand/Big%20Buck%20Bunny%20Adaptive.ism/Manifest" /&gt;
        &lt;/p:Player&gt;
    &lt;/Grid&gt;

&lt;/UserControl&gt;</pre>
<p>Build the application and watch the streaming movie. There is nothing more satisfying than getting something (anything) working!</p>
<p><a href="http://jesseliberty.com/wp-content/uploads/2010/04/SMurF.jpg"><img style="display: inline; border-width: 0px;" title="SMurF" src="http://jesseliberty.com/wp-content/uploads/2010/04/SMurF_thumb.jpg" border="0" alt="SMurF" width="614" height="390" /></a></p>
<p><a href="http://slgeek.com//wordpress/wp-content/files/minitutorialsource/HVPT1.zip"><img style="margin: 10px 15px 15px 0px; display: inline; border: 0px;" title="SaveBlue" src="http://jesseliberty.com/wp-content/uploads/2010/04/SaveBlue.png" border="0" alt="SaveBlue" width="48" height="64" align="left" /></a></p>
<p><a href="http://slgeek.com//wordpress/wp-content/files/minitutorialsource/HVPT1.zip"><br />
<span style="font-size: small;">Download the source code</span></a></p>
<div class="wlWriterHeaderFooter" style="margin: 0px; padding: 0px 0px 0px 0px;">This work is licensed under a <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons  license.</a></div>
]]></content:encoded>
			<wfw:commentRss>http://jesseliberty.com/2010/04/01/an-annotated-line-of-business-application/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
<enclosure url="http://jesseliberty.com/wp-content/uploads/2010/03/HyperVideoOverview.wmv" length="2854199" type="video/x-ms-wmv" />
		</item>
		<item>
		<title>Silverlight HVP on Silverlight TV</title>
		<link>http://jesseliberty.com/2010/04/01/silverlight-hvp-on-silverlight-tv/</link>
		<comments>http://jesseliberty.com/2010/04/01/silverlight-hvp-on-silverlight-tv/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 21:09:23 +0000</pubDate>
		<dc:creator>Jesse Liberty</dc:creator>
				<category><![CDATA[HyperVideo Player]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[HVP]]></category>
		<category><![CDATA[Patterns]]></category>

		<guid isPermaLink="false">http://jesseliberty.com/2010/04/01/silverlight-hvp-on-silverlight-tv/</guid>
		<description><![CDATA[&#160; The Silverlight HyperVideo Project has made two guest appearances on Silverlight TV.&#160; In the first, I talk with John Papa about the project itself and how it has evolved. Then, during Mix, Tim Heuer and I sat down with &#8230; <a href="http://jesseliberty.com/2010/04/01/silverlight-hvp-on-silverlight-tv/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://channel9.msdn.com/shows/SilverlightTV/Silverlight-TV-16-Top-Features-in-Silverlight-4/"><img style="border-bottom: 0px; border-left: 0px; margin: 5px 20px 20px 0px; display: inline; border-top: 0px; border-right: 0px" title="JLSLTV2" border="0" alt="JLSLTV2" align="left" src="http://jesseliberty.com/wp-content/uploads/2010/04/JLSLTV21.jpg" width="244" height="153" /></a> </p>
<p>&#160;</p>
<p>The <a href="http://silverlight.net/getstarted/slhvp" target="_blank">Silverlight HyperVideo Project</a> has made two guest appearances on Silverlight TV.&#160; </p>
<p><a href="http://channel9.msdn.com/shows/SilverlightTV/Silverlight-TV-10-Jesse-Liberty-Explains-the-Hyper-Video-Project/" target="_blank">In the first</a>, I talk with John Papa about the project itself and how it has evolved.</p>
<p>Then, during Mix, <a href="http://timheuer.com">Tim Heuer</a> and I sat down with John to discuss <a href="http://channel9.msdn.com/shows/SilverlightTV/Silverlight-TV-16-Top-Features-in-Silverlight-4/">What’s New In Silverlight 4</a>, and I managed to sneak in a few comments about the HVP as well. </p>
<p>Silverlight TV has numerous great interviews, and is quickly becoming a valued asset throughout the Silverlight community.&#160; </p>
<p><a href="http://channel9.msdn.com/shows/SilverlightTV/"><img style="border-bottom: 0px; border-left: 0px; margin: 5px 15px 15px 0px; display: inline; border-top: 0px; border-right: 0px" title="SilverlightTV_100px" border="0" alt="SilverlightTV_100px" align="left" src="http://jesseliberty.com/wp-content/uploads/2010/04/SilverlightTV_100px.png" width="104" height="104" /></a></p>
<p>Tens of thousands of people view each episode. Check it out <a href="http://channel9.msdn.com/shows/SilverlightTV/">here</a>. </p>
<p>Then take a look at <a href="http://johnpapa.net/">John Papa’s site</a> as well. </p>
<p>Then come back here, because the last thing I want is for you to decide you like JP so much you stop visiting. Next thing you know, I’m sitting in the dark.</p>
<p><a href="http://jesseliberty.com/wp-content/uploads/2010/04/SilverlightTV_100px1.png">&#160;</a></p>
<div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;">This work is licensed under a <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons  license.</a></div>
]]></content:encoded>
			<wfw:commentRss>http://jesseliberty.com/2010/04/01/silverlight-hvp-on-silverlight-tv/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Configuration &amp; Decoupled Modules</title>
		<link>http://jesseliberty.com/2010/01/23/configuration-decoupled-modules/</link>
		<comments>http://jesseliberty.com/2010/01/23/configuration-decoupled-modules/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 18:26:00 +0000</pubDate>
		<dc:creator>Jesse Liberty</dc:creator>
				<category><![CDATA[HyperVideo Player]]></category>
		<category><![CDATA[Mini-Tutorial]]></category>
		<category><![CDATA[BestPractices]]></category>
		<category><![CDATA[HVP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Two architectural demands for the Silverlight HVP, which are common to many larger applications, came together this week and crystallized into a design that looks to solve a couple other, unanticipated requirements.   Specifically, we knew that (1) we wanted to &#8230; <a href="http://jesseliberty.com/2010/01/23/configuration-decoupled-modules/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blogs.silverlight.net/blogs/jesseliberty/MiniTutorialLogo_51349CB6.jpg"><img style="margin: 10px 0px; display: inline; border-width: 0px;" title="MiniTutorialLogo" src="http://blogs.silverlight.net/blogs/jesseliberty/MiniTutorialLogo_thumb_47F86175.jpg" border="0" alt="MiniTutorialLogo" width="240" height="69" /></a></p>
<p><a href="http://blogs.silverlight.net/blogs/jesseliberty/SLHvpLogoNoBorder_277121C3.jpg"><img style="margin: 10px 0px; display: inline; border-width: 0px;" title="SLHvpLogoNoBorder" src="http://blogs.silverlight.net/blogs/jesseliberty/SLHvpLogoNoBorder_thumb_02DF943F.jpg" border="0" alt="SLHvpLogoNoBorder" width="207" height="240" align="left" /></a></p>
<p>Two architectural demands for the <a href="http://slhvp.com" target="_blank">Silverlight HVP</a>, which are common to many larger applications, came together this week and crystallized into a design that looks to solve a couple other, unanticipated requirements.   Specifically, we knew that (1) we wanted to have configuration files and that (2) we wanted each module to be created independently of all the other modules. After some discussion, thrashing, input from some great folks at <a href="http://www.codemash.org" target="_blank">CodeMash</a>, and further review, the design that has emerged allows us to implement two other less thought-through requirements: (3) the ability to restore the state of the application to an earlier condition and (4) the ability to save the state of the application when it is shut down.</p>
<p><span id="more-210"></span></p>
<p><strong>The New Design For Configuration</strong></p>
<p>All of this is much easier to understand by diving into the design that has emerged.  While the UI has not been determined, the core modules have been identified, and it is easier to conceptualize them with images; even if they don’t necessarily reflect how the modules will be presented to the user.</p>
<h3>Function Vs. UI</h3>
<p>Below are two sketches of potential User Interfaces for the same four objects; neither of these represents a considered UI design, but rather are here to make concrete the underlying structure that would support such disparate designs. (<em>Click on images to enlarge</em>)</p>
<p><a href="http://blogs.silverlight.net/blogs/jesseliberty/StandardMockup.bmml_63338E41.jpg"><img style="margin: 10px 0px 10px 15px; display: inline; border-width: 0px;" title="Standard Mockup.bmml" src="http://blogs.silverlight.net/blogs/jesseliberty/StandardMockup.bmml_thumb_29444B55.jpg" border="0" alt="Standard Mockup.bmml" width="240" height="118" align="right" /></a></p>
<p>In the standard mock-up (which may well represent the standard UI), the <strong>HVPItemsControl </strong>contains a list of all the items (videos, animations, etc.) that will be viewed in this <strong>HVPSet.</strong></p>
<p>The <strong>Current Item</strong> selected (or defaulted to)   determines the topics to be listed in the <strong>HVPLocationsControl </strong>and the hyperlinks listed in the <strong>HVPLinksControl</strong>.</p>
<p>Selecting a location causes the <strong>HVPPlayer Module</strong> to jump to the corresponding location. Selecting a new Item causes the <strong>HVPLocationsControl </strong>and the <strong>HVPLinks</strong> <strong>Module</strong> to fetch their new data</p>
<p>Selecting a link causes a new <strong>HVPSet</strong> to be created, potentially with its own Items, each of which has its own locations and links.</p>
<h3>Distinguishing the Module from its UI</h3>
<p><a href="http://blogs.silverlight.net/blogs/jesseliberty/AltMockup_0FDC481B.jpg"><img style="margin: 10px 0px 10px 15px; display: inline; border-width: 0px;" title="Alt Mockup" src="http://blogs.silverlight.net/blogs/jesseliberty/AltMockup_thumb_4167B5B0.jpg" border="0" alt="Alt Mockup" width="240" height="174" align="right" /></a></p>
<p>Before discussing configuration, event and state management, let’s look at a quick mock-up of another UI for these four primary modules (excluding the speculated Cloud Module)</p>
<p>The goal of creating this second mock-up, again, is to help wrap our heads around the difference between the functionality of the various modules, and their appearance (UI).</p>
<p>It should be quite easy to create a UI like this just with with templates, though no one is suggesting that this amalgam of different approaches is a serious design.</p>
<p>(Though, I must admit, I like the links appearing in bubbles, perhaps with a soft popping sound as they animate into existence from a point, expanding outwards).</p>
<h3>Configuration</h3>
<p>The requirement is that each module can be created in any order, and that no module is required, nor does any module know about any other. There are a number of ways to architect for this; though the problem is both constrained and (therefore?) simplified by the decision to create a composite application using <a href="http://mef.codeplex.com" target="_blank">MEF</a>.</p>
<p>My strong inclination is to treat design of anything you are not about to code as a form of optimization: best left until you know what is needed. I’m a firm believer in Emerging Design, which, for me comes down to the recognition that you cannot know, in advance, what your architecture should be, because both the requirements and the design will evolve in response to the very act of building the application.</p>
<p>You can, and should,  however, distinguish between a flexible architecture and a brittle one. One great way to do so is to throw ideas at the architecture and see if it has to change significantly every time you add a feature or a new way of approaching the problem. If the architecture nimbly adjusts and, better, expands on the requirement to reveal new possibilities, you are in great shape. (If it creaks and threatens to break with every new idea, then it is time to rethink!)</p>
<p><strong>We have made the following decisions, to be implemented in the next three weeks:</strong></p>
<ul>
<li><a href="http://mef.codeplex.com" target="_blank">MEF</a> will be used to compose the application</li>
<li>An Event Manager (<strong>HVPEvents</strong>) will be created, and each module will register with <strong>HVPEvents </strong>when created by <a href="http://mef.codeplex.com" target="_blank">MEF</a></li>
<li>Events will signal a change in <em>state</em> of the current <strong>HVPSet   [<em>footnote 1</em>]</strong>
<ul>
<li>Modules will check the state object to determine what their current configuration should be</li>
</ul>
</li>
<li>Configuration will be created first as objects, then persisted with Xaml   [<em><strong>footnote 2]</strong></em></li>
</ul>
<table border="3" cellspacing="2" cellpadding="4" width="400">
<tbody>
<tr>
<td width="400" valign="top">Markup Model Equals Object Model – <a href="http://blogs.windowsclient.net/rob_relyea/" target="_blank">Rob Relyea</a></td>
</tr>
</tbody>
</table>
<p>The rest of this posting will focus on <strong>two key ideas</strong>:</p>
<ol>
<li>Configuration and state persistence will be captured in objects and persisted with Xaml</li>
<li>Modules announce only that their state has changed; interested modules then chek the current state.</li>
</ol>
<h3>Configuration, Objects, Xaml and Persistance</h3>
<p>The state of a module is represented by a corresponding state object (e.g., <strong>HVPLocationState</strong>). The state of the application at any given moment is held by an <strong>ApplicationState</strong> object and represented as an <strong>HVPSet</strong>. The <strong>ApplicationState</strong> is, in turn, composed of the module state objects. Thus, the state of the application illustrated above would be represented by an <strong>HVPSet</strong> object that contains an <strong>HVPLocationState</strong> object, an <strong>HVPItemsState</strong> object and an <strong>HVPLinksState</strong> object. Note that there is no state object for the player as the player’s state is determined by the other objects (at least at this moment).</p>
<p>[Note, the state objects are not implemented in the current release, and are really mental placeholders for a final design. The goal, however, is to have objects that correspond to the information stored in the Xaml configuration file]</p>
<p>The <strong>ApplicationState </strong>object will initially only exist in memory. In time, it will be persisted either locally (local storage) or on a server, and accessed via a URL.</p>
<p>I’ll walk through this below, but note that this design will be implemented in stages, roughly:</p>
<ul>
<li>First stage: we only know about configuration state, and that is hard-wired</li>
<li>Stage 2: we know about configuration state by reading a Xaml file and creating the objects</li>
<li>Stage 3: we know about configuration state by reading Xaml files (plural) identified by the Modules and assembling the configuration state</li>
<li>Stage 4: we can return to a previous state by storing a collection of HVPSet objects in memory, each of which consists of state objects for each module</li>
<li>Stage 5: we can persist state by writing the members of all the HVPSet objects to Xaml files.</li>
<li>Stage 6: The state of the application can be persisted by a service which returns a URL to that state. The user can then store that URL (to resume later) or send it to someone else (“Check out this very cool video and note the links to our site!”) that will allow another user to restore to the exact state that was saved, including the location in the video, the other items enqueued, the links displayed, etc.</li>
</ul>
<h3>Configuring Each Module</h3>
<p>When a module is added to the application by <a href="http://mef.codeplex.com" target="_blank">MEF</a> it will register itself with the <strong>HVPEvents </strong>class. [<em><strong>footnote 2</strong>] </em></p>
<p><strong>Initial Configuration</strong></p>
<p>The module will ask the <strong>HVPState</strong> for its own state object (e.g., the <strong>HVPLocation</strong> module will ask for the <strong>HVPLocationState</strong> object). If that object is not null, the module will use the state object to configure itself.</p>
<p>When an object wishes to raise an event, it will send a message to <strong>HVPEvents </strong>which will, in turn, raise the appropriate event. The event will signal modules that subscribe to that event that they need to obtain their State object and their use of the state object will be identical to their actions in the initial configuration.</p>
<p>Let’s walk through a couple scenarios:</p>
<p><strong>Bootstrapping when the user selects a video or set of videos</strong></p>
<p>In this scenario the application has not started on the user’s machine, and the user makes a gesture (e.g., clicks on a link) to “watch” a video or an animation, or more likely an entire “experience.” In any case, the URL resolves to an <strong>HVPSet</strong> which is passed to the application on start up.</p>
<p>As the Application bootstraps it creates the  <strong>ApplicationState </strong>(a <a href="http://en.wikipedia.org/wiki/Singleton_pattern" target="_blank">Singleton</a>). The <strong>ApplicationState</strong> is given the Uri of the selected HVPSet, which returns a Xaml file. The <strong>ApplicationState </strong>asks the <strong>ConfigurationParser </strong>to convert the Xaml into an <strong>HVPSet. </strong>In version 1, the <strong>HVPSet</strong> that is created has the Uri of the <strong>HVPItemsState.xaml</strong> file.</p>
<p>When <a href="http://mef.codeplex.com" target="_blank">MEF</a> adds the <strong>HVPItemsModule, </strong>the <strong>HVPItemsModule</strong> requests the <strong>HVPItemsState</strong> object from <strong>ApplicationState. </strong>The <strong>AppliationState</strong> requests the <strong>HVPItemsState</strong> from the <strong>HVPState</strong>, which in turn asks the <strong>ConfigurationParser</strong> to read the <strong>HVPItemsState.xaml </strong>file and to return an <strong>HVPItemsState </strong>object which it then holds a reference to. The <strong>HVPState</strong> object also returns a copy of the <strong>HVPItemsState </strong>to the <strong>HVPItemsModule</strong>(by way of the <strong>ApplicationState</strong> object.) The <strong>HVPItemsModule</strong> then sends a message to <strong>HVPEvents </strong>which in turn raises the <strong>ApplicationStateChanged</strong> event.</p>
<p>The <strong>HVPLocationModule</strong> / <strong>HVPLocationState</strong> objects and the <strong>HVPLinksModule</strong> / <strong>HVPLinksState</strong> objects are created in much the same way.</p>
<p>When the <strong>HVPViewer </strong>is initialized, it obtains the current <strong>HVPItem </strong>from the <strong>ApplicationState</strong> which it uses to determine what type of <strong>HVPFrame </strong>to create. The <strong>HVPFrame</strong> in turn creates the appropriate <strong>HVPPlayer</strong> which, in its turn, obtains the item using the same mechanisms.  The <strong>HVPViewer </strong>registers to obtain StateChange notifications so that if a different <strong>HVPItem</strong> is requested the correct Frame and Player can be created.</p>
<h3>Handling User Generated Events</h3>
<p>While an item is displaying the user can take any of the following actions:</p>
<ul>
<li>Click on an item in the ItemModule</li>
<li>Click on a topic in the LocationModule</li>
<li>Click on a link in the LinksModule</li>
<li>Stop the application</li>
<li>Request a snapshot of the current state of the application</li>
<li>Request a new set from the server (by whatever gesture the user began the application)</li>
</ul>
<p><strong>Clicking on an Item</strong> causes the <strong>HVPItemsModule</strong> to send a message to <strong>HVPEvents </strong>which raises the <strong>ApplicationStateChanged, </strong>which in turn causes the <strong>HVPLocation</strong> module and the <strong>HVPLinks</strong> module to re-set their state based on the current item.</p>
<p><strong>Clicking on a topic</strong> causes the <strong>LocationsModule</strong> to send a message to <strong>HVPEvents </strong>which raises the <strong>ApplicationStateChanged, </strong>which in turn causes the the <strong>HVPLinks</strong> module to re-set its state and the <strong>HVPPlayer</strong> to seek to the requested location.</p>
<p><strong>Clicking on a link </strong>causes the <strong>HVPLinksModule</strong> to send a message to <strong>HVPEvents </strong>which raises the ApplicationStateChanged, which in turn causes all the modules to set their state based on the new HVPSet. (Each link is tied to an HVPSet with its own set of Items).</p>
<p>In a version after V1, <strong>Stopping or closing the application or requesting a snapshot </strong>will (probably) cause a dialog box to open to ask the user if state should be saved, which is accomplished by having the <strong>ApplicationState</strong> save its current  <strong>HVPSet </strong>either locally or on a server, with a Uri returned which is then saved locally.</p>
<h3><strong>Design Simplification</strong></h3>
<p>In the current design the only event is the <strong>ApplicationStateChanged</strong>event. For now, therefore, we will collapse <strong>HVPEvents </strong>into the <strong>ApplicationState</strong> object, and modules will not need to register, they will obtain the <strong>ApplicationState Instance</strong> and request that it fire the <strong>ApplicationStateChanged</strong> event.</p>
<h3>Marker Reached, TimeObject Created, TimeReached</h3>
<p>An <span class="removed_link">earlier iteration</span> of this design designated a number of other events that are now subsumed under the <strong>ApplicationStateChanged</strong> event, including the events needed to signal the <strong>HVPPlayer</strong> that the <strong>HVPLinks</strong> module has created a <strong>WatchedTime </strong>collection (for elapsed times at which it needs to be notified) and the ability for the <strong>HVPPlayer</strong> to notify any interested modules that a <strong>WatchedTime</strong> has arrived or that a <strong>Marker</strong> has been reached.</p>
<p>All of these are now handled as described above; that is, e.g., when the <strong>HVPPlayer</strong> reaches a <strong>Marker</strong> or a <strong>WatchedTime</strong> it updates the <strong>ApplicationState</strong> which in turn fires off an <strong>ApplicationStateChanged</strong> event, and the interested modules reset their own state accordingly (e.g., the <strong>HVPLinks</strong> module might add a link to its list).</p>
<p>&#8212;&#8212;&#8212;-</p>
<p>[1] Particular thanks to <a href="http://codebetter.com/blogs/jeremy.miller/" target="_blank">Jeremy D. Miller</a> for helping me think this through at an Open Spaces at <a href="http://codemash.org/" target="_blank">CodeMash</a>.<br />
[2] Special thanks to <a href="http://blogs.windowsclient.net/rob_relyea/" target="_blank">Rob Relyea</a> and to <a href="http://blogs.msdn.com/gblock/" target="_blank">Glenn Block</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://jesseliberty.com/2010/01/23/configuration-decoupled-modules/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Silverlight HVP Proof Of Concept Released!</title>
		<link>http://jesseliberty.com/2010/01/06/silverlight-hvp-proof-of-concept-released/</link>
		<comments>http://jesseliberty.com/2010/01/06/silverlight-hvp-proof-of-concept-released/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 05:13:00 +0000</pubDate>
		<dc:creator>Jesse Liberty</dc:creator>
				<category><![CDATA[HyperVideo Player]]></category>
		<category><![CDATA[HVP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[I’m incredibly proud to say that we were able to release the Silverlight HVP proof of concept alpha release on time, at 12:05 am Wednesday January 6, 2010 (GMT-5).&#160; As noted in our release schedule this is the first of &#8230; <a href="http://jesseliberty.com/2010/01/06/silverlight-hvp-proof-of-concept-released/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blogs.silverlight.net/blogs/jesseliberty/SLHvpLogo_69B85963.jpg" mce_href="http://blogs.silverlight.net/blogs/jesseliberty/SLHvpLogo_69B85963.jpg"><img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN: 10px 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=SLHvpLogo border=0 alt=SLHvpLogo src="http://blogs.silverlight.net/blogs/jesseliberty/SLHvpLogo_thumb_771E6C69.jpg" width=217 height=240 mce_src="http://blogs.silverlight.net/blogs/jesseliberty/SLHvpLogo_thumb_771E6C69.jpg"/></a> </p>
<p>I’m incredibly proud to say that we were able to release the <a href="http://slhvp.com/" target=_blank mce_href="http://slhvp.com">Silverlight HVP</a> proof of concept <a href="http://silverlighthvp.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=38273" target=_blank mce_href="http://silverlighthvp.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=38273">alpha release</a> on time, at 12:05 am Wednesday January 6, 2010 (GMT-5).&nbsp; As noted in our <a href="http://silverlighthvp.codeplex.com/wikipage?title=ReleaseSchedule" mce_href="http://silverlighthvp.codeplex.com/wikipage?title=ReleaseSchedule">release schedule</a> this is the first of a series of releases scheduled for every second Wednesday.<a href="http://blogs.silverlight.net/blogs/jesseliberty/iStock_maleDancerXSmall_61C0B701.jpg" mce_href="http://blogs.silverlight.net/blogs/jesseliberty/iStock_maleDancerXSmall_61C0B701.jpg"><img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN: 10px 0px 10px 15px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="the dancer" border=0 alt="the dancer" align=right src="http://blogs.silverlight.net/blogs/jesseliberty/iStock_maleDancerXSmall_thumb_562AF9C2.jpg" width=160 height=240 mce_src="http://blogs.silverlight.net/blogs/jesseliberty/iStock_maleDancerXSmall_thumb_562AF9C2.jpg"/></a></p>
<p>While this first release exceeds what we promised for the Proof of Concept, it is still very much a hard-coded representation of what we plan to release in the&nbsp; coming weeks. Our first major release will be in two weeks, on January 20, when we swap out the hard-coded modules and swap in the <a href="http://mef.codeplex.com/" target=_blank mce_href="http://mef.codeplex.com">mef</a>-based dynamic modules that show the true colors of our emerging design.</p>
<p><u>Key Features in the Proof Of Concept</u></p>
<ul>
<li><a href="http://smf.codeplex.com/" target=_blank mce_href="http://smf.codeplex.com/">Silverlight Media Framework</a> player subclassed and placed in a view</li>
<li>Table of contents with hard-coded but live links that seek to the appropriate spot in the streaming video</li>
<li>Table of links with hard-coded but clickable links that appear at designated times as the movie progresses</li>
</ul>
<p>Thanks to all for your continuing support. </p>
]]></content:encoded>
			<wfw:commentRss>http://jesseliberty.com/2010/01/06/silverlight-hvp-proof-of-concept-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configuration Files for Silverlight HVP</title>
		<link>http://jesseliberty.com/2010/01/03/configuration-files-for-silverlight-hvp-2/</link>
		<comments>http://jesseliberty.com/2010/01/03/configuration-files-for-silverlight-hvp-2/#comments</comments>
		<pubDate>Sun, 03 Jan 2010 23:43:00 +0000</pubDate>
		<dc:creator>Jesse Liberty</dc:creator>
				<category><![CDATA[HyperVideo Player]]></category>
		<category><![CDATA[HVP]]></category>
		<category><![CDATA[Mini-Tutorial]]></category>

		<guid isPermaLink="false">http://jesseliberty.com/2010/01/03/configuration-files-for-silverlight-hvp-2/</guid>
		<description><![CDATA[This mini-tutorial is part of the Silverlight HyperVideo Project documentation. Taking Risks One of the great pleasures, and total terrors of documenting this open-source application is that occasionally I have to offer up some half-baked ideas that risk displaying how &#8230; <a href="http://jesseliberty.com/2010/01/03/configuration-files-for-silverlight-hvp-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://jesseliberty.com/wp-content/uploads/2010/03/MiniTutorialLogo11.jpg" mce_href="http://blogs.silverlight.net/blogs/jesseliberty/MiniTutorialLogo_71410D94.jpg"><img style="border-right-width: 0px; margin: 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="MiniTutorialLogo" border="0" alt="MiniTutorialLogo" src="http://jesseliberty.com/wp-content/uploads/2010/03/MiniTutorialLogo_thumb9.jpg" width="240" height="69" mce_src="http://blogs.silverlight.net/blogs/jesseliberty/MiniTutorialLogo_thumb_771BB12D.jpg" /></a> </p>
<p><a href="http://jesseliberty.com/wp-content/uploads/2010/03/SLHvpLogo5.jpg" mce_href="http://blogs.silverlight.net/blogs/jesseliberty/SLHvpLogo_7AB9CC0A.jpg"><img style="border-right-width: 0px; margin: 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SLHvpLogo" border="0" alt="SLHvpLogo" src="http://jesseliberty.com/wp-content/uploads/2010/03/SLHvpLogo_thumb4.jpg" width="217" height="240" mce_src="http://blogs.silverlight.net/blogs/jesseliberty/SLHvpLogo_thumb_7A4D9915.jpg" /></a>     <br />This <a href="http://silverlight.net/learn/tutorials/mini/1/" mce_href="http://silverlight.net/learn/tutorials/mini/1/">mini-tutorial</a> is part of the <a href="http://slhvp.com/" target="_blank" mce_href="http://slhvp.com">Silverlight HyperVideo </a><a href="http://silverlighthvp.codeplex.com/documentation" target="_blank" mce_href="http://silverlighthvp.codeplex.com/documentation">Project documentation</a>.</p>
<h3>Taking Risks</h3>
<p>One of the great pleasures, and total terrors of documenting this open-source application is that occasionally I have to offer up some half-baked ideas that risk displaying how little I know about a particular topic, but which are necessary to generate discussion. Caveat: this is such an entry.&#160; I could have put this into the <a href="http://silverlighthvp.codeplex.com/documentation" target="_blank" mce_href="http://silverlighthvp.codeplex.com/documentation">project documentation</a> but I saw an opportunity to widen the audience on a topic that is important to Silverlight Programmers, even if not part of Silverlight itself.</p>
<h3>Goal</h3>
<p mce_keep="true">&#160;</p>
<p>We want the modules in the <a href="http://slhvp.com/" target="_blank" mce_href="http://slhvp.com">Silverlight HVP</a> to be as flexible as possible. Towards that end we’ve adopted two strategies:</p>
<ul>
<li>Using the <a href="http://mef.codeplex.com/" target="_blank" mce_href="http://mef.CodePlex.com">Managed Extensibility Framework</a> (MEF) to make every module composable and extensible. </li>
<li>Using XML files to provide Just In Time configuration for each module. </li>
</ul>
<h3>XML Schemas</h3>
<p>It will greatly simplify everyone’s work if we have agreed upon schemas, at least for the configuration files we know about:</p>
<ul>
<li>slhvpInit.xml – initialize the application </li>
<li>slhvpTOC.xml – create a table of contents for a video </li>
<li>slhvpLinks.xml – establish which links will appear while a video runs and what to do when the user clicks on each </li>
</ul>
<p>As a necessary first step, I’ve sketched out examples of slhvpTOC.xml and slhvpLinks.xml – these are not intended to be complete, but to generate <a href="http://silverlighthvp.codeplex.com/Thread/List.aspx" target="_blank" mce_href="http://silverlighthvp.codeplex.com/Thread/List.aspx">discussion</a>. They are posted here as a way to invite more folks into that discussion.</p>
<h3>slhvpTOC.xml (draft example)</h3>
<pre class="brush: xml;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;ConfigFile Name=&quot;TOC Configuration File&quot;
            Guid=&quot;687DA074-8F94-43a9-AC23-46DF823F8A65&quot;
            xmlns=http://slhvp.com/TOC&gt;
  &lt;ConfigurationMetaData&gt;
    &lt;Version&gt;0.0.1&lt;/Version&gt;
    &lt;Purpose Summary=&quot;Create a Table of Contents for a video&quot; /&gt;
    &lt;![CDATA[
    This configuration file is used to create the table of contents. The topics are listed as links, which cause
   the video to seek forward or backward to the designated topic.
     ]]&gt;
     &lt;Module Name=&quot;slHVP Standard TOC Module version 0.1&quot;
             Guid=&quot;D3E2AC2B-FD34-40b4-BC42-308F7956C7D9&quot; /&gt;
     &lt;CreatedDate Format=&quot;AmericanShort&quot; Date=&quot;01/01/2001&quot; /&gt;
     &lt;Conditions&gt;
       &lt;Condition Name=&quot;Advanced&quot;
                  Value=&quot;True&quot; /&gt;
     &lt;/Conditions&gt;
   &lt;/ConfigurationMetaData&gt;

   &lt;ConfigurationData&gt;
   &lt;TOCEntries&gt;
     &lt;TOC&gt;
       &lt;Type&gt; TOC &lt;/Type&gt;
       &lt;SeekTo&gt;
         &lt;SeekToTime&gt;00:00:10:000&lt;/SeekToTime&gt;
       &lt;/SeekTo&gt;
       &lt;Text&gt; Introduction &lt;/Text&gt;
     &lt;/TOC&gt;
     &lt;TOC&gt;
       &lt;Type&gt; TOC &lt;/Type&gt;
       &lt;SeekTo&gt;
         &lt;!-- Seek directly to an injected or existing marker --&gt;
         &lt;SeekToMarker ID=&quot;LINQ&quot; /&gt;
       &lt;/SeekTo&gt;
       &lt;Text&gt; Introduction to LinQ &lt;/Text&gt;
     &lt;/TOC&gt;
     &lt;TOC&gt;
       &lt;Type&gt; TOC &lt;/Type&gt;
       &lt;SeekTo&gt;
         &lt;SeekToTime&gt;00:20:10:010&lt;/SeekToTime&gt;
       &lt;/SeekTo&gt;
       &lt;Text&gt; MVVM &lt;/Text&gt;
       &lt;!-- Designate that this entry in toc is only idsplayed if
       the Advanced condition has been set to true --&gt;
       &lt;Visibility Condition=&quot;Advanced&quot; RequiredValue=&quot;True&quot; /&gt;
     &lt;/TOC&gt;
   &lt;/TOCEntries&gt;
   &lt;/ConfigurationData&gt;
 &lt;/ConfigFile&gt;
  </pre>
<p>The file consists of a header (lines 2-4) and two major sections – the meta-data (lines 5-19) and the listing of the (abridged) Table of Contents entries (lines 22 – 48). Notice that the final TOC entry (lines 38-47) is visible only if the condition “Advanced” is set to true, which it is in the Conditions section int eh meta-data (lines 15-18.</p>
<h3>slhvpLinks.xml (draft)</h3>
<pre class="brush: xml;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;ConfigFile Name=&quot;Links Configuration File&quot;
            Guid=&quot;83ca650e-25ff-414d-adef-7aa790f9d858&quot;
            xmlns=&quot;http://slhvp.com/Links&quot;&gt;
  &lt;ConfigurationMetaData&gt;
    &lt;Version&gt;0.0.1&lt;/Version&gt;
    &lt;Purpose Summary=&quot;Link time to hyperlink to action&quot; /&gt;
    &lt;![CDATA[
    This configuration file is used to create linkage among an elapsed time in a How Do I video with
     the text of a new link to display at that time and then with the action to take based on the new link being clicked
     ]]&gt;
     &lt;Module Name=&quot;slHVP Standard Link Module version 0.1&quot;
             Guid=&quot;FB252D52-A603-4bf4-89C8-AA64E52D0343&quot; /&gt;
     &lt;CreatedDate Format=&quot;AmericanShort&quot; Date=&quot;01/01/2001&quot; /&gt;
     &lt;Conditions /&gt;
   &lt;/ConfigurationMetaData&gt;

   &lt;ConfigurationData&gt;
   &lt;Links&gt;
     &lt;Link&gt;
       &lt;Type&gt; Hyperlink &lt;/Type&gt;
       &lt;Time&gt;
         &lt;!--Time format is hh:mm:ss:msmsms--&gt;
         &lt;StartTime&gt;00:00:00:000&lt;/StartTime&gt;
         &lt;!--Undefined end time - visible to end of video--&gt;
         &lt;EndTime&gt;0&lt;/EndTime&gt;
       &lt;/Time&gt;
       &lt;Text&gt; About this video &lt;/Text&gt;
       &lt;Action&gt; WebPage &lt;/Action&gt;
       &lt;URL&gt; http://jliberty.com/aboutHyperlink.htm &lt;/URL&gt;
     &lt;/Link&gt;
     &lt;Link&gt;
       &lt;Type&gt; Hyperlink &lt;/Type&gt;
       &lt;Time&gt;
         &lt;StartTime&gt;00:05:11:010&lt;/StartTime&gt;
         &lt;!--End time of 0 or missing end time both mean no end time, run to end--&gt;
       &lt;/Time&gt;
       &lt;Text&gt; What is Linq &lt;/Text&gt;
       &lt;Action&gt; Video &lt;/Action&gt;
       &lt;URL&gt; http://silverlight.net/learn/video#103 &lt;/URL&gt;
     &lt;/Link&gt;
     &lt;Link&gt;
       &lt;Type&gt; Hyperlink &lt;/Type&gt;
       &lt;Time&gt;
         &lt;StartTime&gt;00:12:00:110&lt;/StartTime&gt;
       &lt;/Time&gt;
       &lt;Text&gt; Linq Programming Animation &lt;/Text&gt;
       &lt;!-- video pauses and is replaced by animation frame --&gt;
       &lt;Action&gt; Animation &lt;/Action&gt;
       &lt;!--Required either a URL or a guid to a frame--&gt;
       &lt;GUID&gt;
         E40D045A-4AC4-4ea9-8501-58F0E0407F61
       &lt;/GUID&gt;
     &lt;/Link&gt;
   &lt;/Links&gt;
    &lt;/ConfigurationData&gt;
  &lt;/ConfigFile&gt;
   </pre>
<p>You can see that this format is quite similar to the TOC format, and one open question is whether we need an inclusive schema.</p>
<p>In this file, each Link has a type, where some of the possible values are</p>
<ul>
<li>HyperLink (link to a URL) </li>
<li>Animation (link to a frame that supports animation </li>
<li>Text (link to a frame that displays non-html text) </li>
</ul>
<p mce_keep="true">&#160;</p>
<h3>Purpose of this posting</h3>
<p>To reiterate, briefly, I have two goals with this posting:</p>
<ol>
<li>Generate discussion about what needs to be in the configuration files and whether this is a reasonable starting point and </li>
<li>Follow through on the implications of my thinking about markers, links, etc. </li>
</ol>
<p>Note that this topic is also under discussion <a href="http://silverlighthvp.codeplex.com/Thread/View.aspx?ThreadId=77016" target="_blank" mce_href="http://silverlighthvp.codeplex.com/Thread/View.aspx?ThreadId=77016">here</a> which is a great place to continue the discussion.</p>
<div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;">This work is licensed under a <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons  license.</a></div>
]]></content:encoded>
			<wfw:commentRss>http://jesseliberty.com/2010/01/03/configuration-files-for-silverlight-hvp-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

