<?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>Ryan Lane</title>
	<atom:link href="http://www.ryanlane.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ryanlane.com</link>
	<description>FUTURIST, USER EXPERIENCE DESIGNER &#38; DEVELOPER</description>
	<lastBuildDate>Thu, 16 Feb 2012 06:28:24 +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>Interactive 3D display</title>
		<link>http://www.ryanlane.com/2012/01/interactive-3d-display/</link>
		<comments>http://www.ryanlane.com/2012/01/interactive-3d-display/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 18:30:43 +0000</pubDate>
		<dc:creator>Ryan Lane</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ryanlane.com/?p=1426</guid>
		<description><![CDATA[<p></p>]]></description>
			<content:encoded><![CDATA[<p><iframe height="315" src="http://www.youtube.com/embed/lW7k-6FUxoo?rel=0" frameborder="0" width="560" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanlane.com/2012/01/interactive-3d-display/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blogging with Siri is easy</title>
		<link>http://www.ryanlane.com/2011/12/blogging-with-siri-is-easy/</link>
		<comments>http://www.ryanlane.com/2011/12/blogging-with-siri-is-easy/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 03:41:35 +0000</pubDate>
		<dc:creator>Ryan Lane</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[interaction]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Siri]]></category>
		<category><![CDATA[speech]]></category>
		<category><![CDATA[Voice]]></category>

		<guid isPermaLink="false">http://www.ryanlane.com/2011/12/blogging-with-siri-is-easy/</guid>
		<description><![CDATA[<p>Siri makes it possible for me to blog now, simply by talking into my phone. It&#8217;s pretty revolutionary to think about how easy it is to speak into my phone and have the text be written on to the page. In fact to this very posts I have &#8220;written&#8221; using Siri on my phone I [...]]]></description>
			<content:encoded><![CDATA[<p>Siri makes it possible for me to blog now, simply by talking into my phone. It&#8217;s pretty revolutionary to think about how easy it is to speak into my phone and have the text be written on to the page. In fact to this very posts I have &#8220;written&#8221; using Siri on my phone I no longer need anything fancier than this.</p>
<p>So I believe this could very well be the future of writing. The end of the keyboard and mouse is near. Hopefully all of these services will work a lot better, like the Microsoft Kinect, and other integrated for services from Nuance or TellMe.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanlane.com/2011/12/blogging-with-siri-is-easy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Universal VESA Mounting adaptor</title>
		<link>http://www.ryanlane.com/2011/11/universal-vesa-mounting-adaptor/</link>
		<comments>http://www.ryanlane.com/2011/11/universal-vesa-mounting-adaptor/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 07:00:37 +0000</pubDate>
		<dc:creator>Ryan Lane</dc:creator>
				<category><![CDATA[Products]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[fabrication]]></category>
		<category><![CDATA[manufacturing]]></category>
		<category><![CDATA[monitor]]></category>
		<category><![CDATA[mount]]></category>
		<category><![CDATA[Ponoko]]></category>
		<category><![CDATA[VESA]]></category>

		<guid isPermaLink="false">http://www.ryanlane.com/2011/11/universal-vesa-mounting-adaptor/</guid>
		<description><![CDATA[<p>I really like my <a href="http://www.amazon.com/gp/product/B003A5Y16Q/ref=as_li_ss_tl?ie=UTF8&#38;tag=futile&#38;linkCode=as2&#38;camp=217145&#38;creative=399373&#38;creativeASIN=B003A5Y16Q" target="_blank"> multitouch Dell SX2210T monitor </a> . I have also used one by HP and 3M. The Dell was the best price point for my home use. One problem it has though is that it doesn’t work with a standard VESA mounting configuration; Dell does not offer any sort [...]]]></description>
			<content:encoded><![CDATA[<p>I really like my <a href="http://www.amazon.com/gp/product/B003A5Y16Q/ref=as_li_ss_tl?ie=UTF8&amp;tag=futile&amp;linkCode=as2&amp;camp=217145&amp;creative=399373&amp;creativeASIN=B003A5Y16Q" target="_blank"> multitouch Dell SX2210T monitor </a> . I have also used one by HP and 3M. The Dell was the best price point for my home use. One problem it has though is that it doesn’t work with a standard VESA mounting configuration; Dell does not offer any sort of adapter. So I did what any sensible person would do. I went ahead and designed my own. I’ve been looking for a good reason to use <a href="http://www.ponoko.com" target="_blank"> Ponoko </a> , which is an amazing fabrication service, and this fit perfectly.</p>
<p>If you want you can purchase my <a href="http://www.ponoko.com/design-your-own/products/universal-monitor-mounting-bracket-6717" target="_blank"> VESA universal mounting adapter </a> plate from Ponoko</p>
<p><a class="thickbox" href="http://www.ryanlane.com/wp-content/uploads/2011/11/IMG_3778.jpg"> <img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="IMG_3778" src="http://www.ryanlane.com/wp-content/uploads/2011/11/IMG_3778_thumb.jpg" alt="IMG_3778" width="373" height="285" border="0" /> </a></p>
<p>The above bolt pattern is something like 35mm from center to center of each one. Which is a bit smaller than the smallest 50mm VESA standard.</p>
<p><a class="thickbox" href="http://www.ryanlane.com/wp-content/uploads/2011/11/IMG_3851.jpg"> <img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="IMG_3851" src="http://www.ryanlane.com/wp-content/uploads/2011/11/IMG_3851_thumb.jpg" alt="IMG_3851" width="285" height="285" border="0" /> </a></p>
<p>I searched all around for a universal plate that would do the trick and I couldn’t fine a single option out there, that would do what I wanted. A few people online suggested drilling holes in a standard VESA plate, which is an okay option but that would leave me with something that was modified specifically for this monitor. I thought it might be better to have something that was slotted so that it could work with a larger range of setups.</p>
<p><a class="thickbox" href="http://www.ryanlane.com/wp-content/uploads/2011/11/BackPanel.jpg"> <img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="BackPanel" src="http://www.ryanlane.com/wp-content/uploads/2011/11/BackPanel_thumb.jpg" alt="BackPanel" width="373" height="266" border="0" /> </a></p>
<p>Here is a photo of the plate mounted to the monitor and the VESA mounting plate mounted to my adapter.</p>
<p>The whole thing works great for me.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanlane.com/2011/11/universal-vesa-mounting-adaptor/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Gigaplane Explorer for the Boeing 737</title>
		<link>http://www.ryanlane.com/2011/07/gigaplane-explorer-for-the-boeing-737/</link>
		<comments>http://www.ryanlane.com/2011/07/gigaplane-explorer-for-the-boeing-737/#comments</comments>
		<pubDate>Tue, 19 Jul 2011 21:45:14 +0000</pubDate>
		<dc:creator>Ryan Lane</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.ryanlane.com/?p=215</guid>
		<description><![CDATA[<p>Handsome&#160;group of people involved in this:<br /> </p> <p></p> <p>One of the most fun projects I&#8217;ve worked on in a while and you can see it here <a href="http://www.newairplane.com/737/explained/">Boeing Next-Generation 737 airplane</a></p>]]></description>
			<content:encoded><![CDATA[<p>Handsome&nbsp;group of people involved in this:<br/><br />
<script type='text/javascript' src='http://static.feedroom.com/affiliate/_common/js/fr_embed.js'></script></p>
<div id='flashcontent'></div>
<p><script type='text/javascript'>
var so = new FlashObject ("http://boeing.pb.feedroom.com/pb-comp/boeing/custom1/player.swf", "Player", "590", "355", "8", "#FFFFFF");
so.addVariable ("Environment", "");
so.addVariable ("SkinName", "custom1");
so.addVariable ("SiteID", "boeing");
so.addVariable ("SiteName", "Boeing");
so.addVariable ("ChannelID", "0264e69ee88ff02c6bc7d6cd3ab81b39356994d1");
so.addVariable ("StoryID", "2ae618d41caa7bae2a30d90c6a83720b1dfd085c");
so.addVariable ("Volume", ".5");
so.addVariable ("HostURL", document.location.href);
so.addParam ("quality", "high");
so.addParam ("allowFullScreen", "true");
so.addParam ("allowScriptAccess", "always");
so.addParam ("menu", "false");
so.write ("flashcontent");
</script></p>
<p>One of the most fun projects I&#8217;ve worked on in a while and you can see it here <a href="http://www.newairplane.com/737/explained/">Boeing Next-Generation 737 airplane</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanlane.com/2011/07/gigaplane-explorer-for-the-boeing-737/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>programming and designing in the browser</title>
		<link>http://www.ryanlane.com/2011/06/programming-and-designing-in-the-browser/</link>
		<comments>http://www.ryanlane.com/2011/06/programming-and-designing-in-the-browser/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 17:38:09 +0000</pubDate>
		<dc:creator>Ryan Lane</dc:creator>
				<category><![CDATA[Futurism]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[ChromeOS]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[web 2.0]]></category>
		<category><![CDATA[webapps]]></category>
		<category><![CDATA[WebOS]]></category>

		<guid isPermaLink="false">http://www.ryanlane.com/?p=200</guid>
		<description><![CDATA[<p>I remember a talk we had back in the early nineties, while I was working at Spry / Internet in a Box, the idea had come up of creating an OS that was entirely based on a browser. At the time the browser was NCSA Mosaic for use and an early beta of Netscape Navigator for the competition. [...]]]></description>
			<content:encoded><![CDATA[<p>I remember a talk we had back in the early nineties, while I was working at Spry / Internet in a Box, the idea had come up of creating an OS that was entirely based on a browser. At the time the browser was NCSA Mosaic for use and an early beta of Netscape Navigator for the competition.  So to say it was too early to talk about is a bit of an understatement. However, it really felt the next logical step. Creating applications and services that ran entirely in the browser would have been crazy hard then with the limitations of  HTML. We didn&#8217;t have JavaScript or CSS yet. Everything we built was done as server side code. CGI applications written in either C/C++ or Perl. My weapon of choice became Perl and SQL for all my programming needs. With everything happening on the server you were a little limited with what you could do. Oh and most users were using a 56k dial up modem to get online.</p>
<p>Fast forward to today and a web application developer has a huge and amazing toolbox at their disposal. Rails, ASP.NET, Python, PHP, Flash, Silverlight, JavaScript, HTML5, CSS, Web Services like JSON, and on and on. Thanks to all the hard word and loads of talented people the limits are no longer the technology or access speeds. The limits now are only our creativity. Now we have <a href="http://html5demos.com/geo">geolocation</a>, <a href="http://www.youtube.com/html5">video</a>, <a href="http://media.24ways.org/2009/15/space.html">animations</a>, and <a href="http://www.julianwong.net/blog/2010/09/a-play-with-html5-audio-mixer-with-canvas/">sound</a>.</p>
<p>The only limit that we&#8217;ve had up until recently was that if you wanted to create interactive content you needed a client application running on your local machine. To create Flash you needed to purchase, install and use the editing tools locally. Which brings me to the point of this post. I only recently found out about a new crop of web based IDEs (Integrated Development Environment). In no particular order.</p>
<p><a href="http://coderun.com"><strong>Coderun</strong></a></p>
<p><img class="alignnone size-medium wp-image-204" title="CodeRun Online IDE" src="http://www.ryanlane.com/wp-content/uploads/2011/06/CodeRun-Online-IDE-500x292.png" alt="CodeRun Online IDE" width="500" height="292" /></p>
<p>You can create and edit .Net , Silverlight and many other types of projects. This is the best damn thing ever. I hope someone at Microsoft buys these guys.</p>
<p><a href="http://c9.io/"><strong>Cloud 9</strong></a></p>
<p><img class="alignnone size-medium wp-image-205" title="Cloud9 " src="http://www.ryanlane.com/wp-content/uploads/2011/06/Cloud9-Your-code-anywhere-anytime.-500x292.png" alt="Cloude 9 IDE example" width="500" height="292" /></p>
<p>All your stand website editing power with Git and Mercurial integration. Paid accounts offer many must have features but the free version can get you up and running quickly.</p>
<p><a href="http://www.akshell.com/">Akshell</a></p>
<p><img class="alignnone size-medium wp-image-206" title="Akshell" src="http://www.ryanlane.com/wp-content/uploads/2011/06/akshell-396x300.png" alt="" width="396" height="300" /></p>
<p>use this to create your web apps in JavaScript. Plain and simple just the way it should be.</p>
<p><a href="http://jsfiddle.net/">jsFiddle</a></p>
<p><img class="alignnone size-medium wp-image-207" title="jsFiddle" src="http://www.ryanlane.com/wp-content/uploads/2011/06/YUI-YQL-Twitter-example-jsFiddle-Online-Editor-for-the-Web-JavaScript-MooTools-jQuery-Prototype-YUI-Glow-and-Dojo-HTML-CSS--500x292.png" alt="jsFiddle example" width="500" height="292" /></p>
<p>It&#8217;s not a full fledged IDE, but it is a great way to start learning, creating and sharing JavaScript snippets. Fantastic way to explore and experience in realtime how the code works.</p>
<p><strong>Now for the design side of things</strong></p>
<p>It&#8217;s not nearly as new but the design side has been very well covered too.</p>
<p><a href="http://www.photoshop.com/"><strong>Photoshop.com</strong></a></p>
<p><img class="alignnone size-medium wp-image-208" title="Adobe Photoshop Express" src="http://www.ryanlane.com/wp-content/uploads/2011/06/Adobe-Photoshop-Express-Organizer-Photoshop.com_-500x292.png" alt="" width="500" height="292" /></p>
<p>The current leader in desktop design has an excellent head start on the web with their <a href="http://www.photoshop.com/">Photoshop.com</a> service</p>
<p>&nbsp;</p>
<p><a href="http://www.aviary.com/"><strong>Aviary</strong></a></p>
<p>Aviary is quickly becoming a designers hub online. What started as a Photoshop lite application for minor photo tweaks has quickly evolved in to one of the best collections of creative applications that run in the browser.</p>
<p><strong><img class="alignnone size-medium wp-image-209" title="Aviary.com" src="http://www.ryanlane.com/wp-content/uploads/2011/06/Free-online-photo-editor-Aviary.com_-500x292.png" alt="" width="500" height="292" /></strong></p>
<p><strong><br />
</strong></p>
<p><strong><a href="http://www.picnik.com/">Picnik</a></strong></p>
<p>My personal favorite web based photo editing tool. I became hooked on Picnik thanks to its early Flickr integration that made it so easy to jump right in and edit my photos already on Flickr.</p>
<p><strong><img class="alignnone size-medium wp-image-210" title="Picnik" src="http://www.ryanlane.com/wp-content/uploads/2011/06/Screen-shot-2011-06-16-at-10.44.55-PM-500x270.png" alt="" width="500" height="270" /><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanlane.com/2011/06/programming-and-designing-in-the-browser/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kinect SDK documentation in ePub</title>
		<link>http://www.ryanlane.com/2011/06/kinect-sdk-documentation-in-epub/</link>
		<comments>http://www.ryanlane.com/2011/06/kinect-sdk-documentation-in-epub/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 00:02:24 +0000</pubDate>
		<dc:creator>Ryan Lane</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Documentation]]></category>
		<category><![CDATA[ePub]]></category>
		<category><![CDATA[Kinect]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[SDK]]></category>

		<guid isPermaLink="false">http://www.ryanlane.com/?p=201</guid>
		<description><![CDATA[<p><a rel="attachment wp-att-203" href="http://www.ryanlane.com/2011/06/kinect-sdk-documentation-in-epub/programmingguide_kinectsdk-2/">Programming Guide Kinect SDK ePub</a></p> <p><a rel="attachment wp-att-203" href="http://www.ryanlane.com/2011/06/kinect-sdk-documentation-in-epub/programmingguide_kinectsdk-2/"></a>Right now the documentations is only available in a lovely Word format. I wanted to read it on my iPad so I went ahead and converted the <a href="http://www.ryanlane.com/?attachment_id=203">Kinect SDK in ePub format</a>. Should work on a Nook too.</p> <p>Go get the <a title="Kinect [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-203" href="http://www.ryanlane.com/2011/06/kinect-sdk-documentation-in-epub/programmingguide_kinectsdk-2/">Programming Guide Kinect SDK ePub</a></p>
<p><a rel="attachment wp-att-203" href="http://www.ryanlane.com/2011/06/kinect-sdk-documentation-in-epub/programmingguide_kinectsdk-2/"></a>Right now the documentations is only available in a lovely Word format. I wanted to read it on my iPad so I went ahead and converted the <a href="http://www.ryanlane.com/?attachment_id=203">Kinect SDK in ePub format</a>. Should work on a Nook too.</p>
<p>Go get the <a title="Kinect SDK" href="http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/">Kinect SDK</a>. To be sure you&#8217;re getting the latest and greatest here&#8217;s the <a href="http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/guides.aspx">official Kinect SDK documentation</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanlane.com/2011/06/kinect-sdk-documentation-in-epub/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MVVM &#8211; Model Notification with Events</title>
		<link>http://www.ryanlane.com/2011/06/mvvm-model-notification-with-events/</link>
		<comments>http://www.ryanlane.com/2011/06/mvvm-model-notification-with-events/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 22:32:29 +0000</pubDate>
		<dc:creator>Ryan Lane</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[MVVM]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.ryanlane.com/2011/06/mvvm-model-notification-with-events/</guid>
		<description><![CDATA[<p>I ran in to an issue using custom complex classes in my model, that wouldn&#8217;t notify the View Model that something had changed. I didn&#8217;t like the idea of building everything as a one to one relationship between my View, View Model and Model just to get the UI to stay current. I prefer instead [...]]]></description>
			<content:encoded><![CDATA[<p>I ran in to an issue using custom complex classes in my model, that wouldn&#8217;t notify the View Model that something had changed. I didn&#8217;t like the idea of building everything as a one to one relationship between my View, View Model and Model just to get the UI to stay current. I prefer instead to create a single item, that is a collection or unit of my complex class.</p>
<p>here’s an example of the simple item model and it&#8217;s more complex element.</p>
<p>Model for <strong>SimpleItem</strong></p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">SimpleItem
        </span>{
            <span style="color: blue">private static </span><span style="color: #2b91af">FancyItem </span>_item = <span style="color: blue">new </span><span style="color: #2b91af">FancyItem</span>();
            <span style="color: blue">public static </span><span style="color: #2b91af">FancyItem </span>Item
            {
                <span style="color: blue">get </span>{ <span style="color: blue">return </span>_item; }
                <span style="color: blue">set </span>{ _item = <span style="color: blue">value</span>; }
            }
        }
</pre>
<p>Model for <strong>FancyItem</strong></p>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>&nbsp;</p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">FancyItem
       </span>{
           <span style="color: blue">private int </span>_index = 0;
           <span style="color: blue">public int </span>Index
           {
               <span style="color: blue">get </span>{ <span style="color: blue">return </span>_index; }
               <span style="color: blue">set </span>{ _index = <span style="color: blue">value</span>; }
           } 

           <span style="color: blue">private string </span>_name = <span style="color: blue">string</span>.Empty;
           <span style="color: blue">public string </span>Name
           {
               <span style="color: blue">get </span>{ <span style="color: blue">return </span>_name; }
               <span style="color: blue">set </span>{ _name = <span style="color: blue">value</span>; }
           } 

           <span style="color: blue">private string </span>_label = <span style="color: blue">string</span>.Empty;
           <span style="color: blue">public string </span>Label
           {
               <span style="color: blue">get </span>{ <span style="color: blue">return </span>_label; }
               <span style="color: blue">set </span>{ _label = <span style="color: blue">value</span>; }
           } 

           <span style="color: blue">private </span><span style="color: #2b91af">DateTime </span>_date = <span style="color: blue">new </span><span style="color: #2b91af">DateTime</span>();
           <span style="color: blue">public </span><span style="color: #2b91af">DateTime </span>Label
           {
               <span style="color: blue">get </span>{ <span style="color: blue">return </span>_date; }
               <span style="color: blue">set </span>{ _date = <span style="color: blue">value</span>; }
           }
       }
</pre>
<p>&nbsp;</p>
<p>Then my <strong>ViewModel</strong> is something like this:</p>
<pre class="code"><span style="color: blue">public </span><span style="color: #2b91af">FancyItem </span>myFancyItem
        {
            <span style="color: blue">set
            </span>{
                <span style="color: blue">if </span>(<span style="color: #2b91af">SimpleItem</span>.Item != <span style="color: blue">value</span>)
                {
                    <span style="color: #2b91af">SimpleItem</span>.Item = <span style="color: blue">value</span>;
                    InvokePropertyChanged(<span style="color: #a31515">"MyFancyItem"</span>);
                }
            }
            <span style="color: blue">get </span>{ <span style="color: blue">return </span><span style="color: #2b91af">SimpleItem</span>.Item; }
        }
</pre>
<p>Then if my binding is something like this:</p>
<pre class="code">&lt;<span style="color: #2b91af">TextBox </span>Text=<span style="color: #a31515">"{Binding myFancyItem.Name, Mode=TwoWay}"</span>&gt;
</pre>
<p>My PropertyChanged will never get called since I’m targeting down to the Name item. If I had an element that was directly exposing the Name string in the ViewModel then everything would work just fine. However, then I would have to duplicate all those lines of code for each variable that I want to expose and modify.</p>
<p>This is where my <strong>ModelBase</strong> event notification comes in to play.</p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">ModelBase
        </span>{
            <span style="color: blue">public void </span>ModelPropertyChanged(<span style="color: blue">string </span>p, <span style="color: #2b91af">EventHandler </span>ModelItemUpdated)
            {
                ModelItemUpdated(p, <span style="color: #2b91af">EventArgs</span>.Empty);
            }
        }
</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>The idea with the ModelBase event, is pretty much the same as the View Model <strong>PropertyChangedEventHandler</strong>. The only challenge I’ve run in to is having to remember to feed it all the way of the food chain.</p>
<p>So here’s how I use it all together:</p>
<p>First I add some events to the parts that can be changed.</p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">FancyItem </span>: <span style="color: #2b91af">ModelBase
        </span>{
            <span style="color: blue">public static event </span><span style="color: #2b91af">EventHandler </span>FancyItemUpdated = <span style="color: blue">delegate </span>{ };

            <span style="color: blue">private int </span>_index = 0;
            <span style="color: blue">public int </span>Index
            {
                <span style="color: blue">get </span>{ <span style="color: blue">return </span>_index; }
                <span style="color: blue">set
                </span>{
                    _index = <span style="color: blue">value</span>;
                }
            } 

            <span style="color: blue">private string </span>_name = <span style="color: blue">string</span>.Empty;
            <span style="color: blue">public string </span>Name
            {
                <span style="color: blue">get </span>{ <span style="color: blue">return </span>_name; }
                <span style="color: blue">set
                </span>{
                    _name = <span style="color: blue">value</span>;
                    ModelPropertyChanged(<span style="color: #a31515">"Name"</span>, FancyItemUpdated);
                }
            } 

            <span style="color: blue">private string </span>_label = <span style="color: blue">string</span>.Empty;
            <span style="color: blue">public string </span>Label
            {
                <span style="color: blue">get </span>{ <span style="color: blue">return </span>_label; }
                <span style="color: blue">set </span>{ _label = <span style="color: blue">value</span>; }
            } 

            <span style="color: blue">private </span><span style="color: #2b91af">DateTime </span>_date = <span style="color: blue">new </span><span style="color: #2b91af">DateTime</span>();
            <span style="color: blue">public </span><span style="color: #2b91af">DateTime </span>Date
            {
                <span style="color: blue">get </span>{ <span style="color: blue">return </span>_date; }
                <span style="color: blue">set
                </span>{
                    _date = <span style="color: blue">value</span>;
                    ModelPropertyChanged(<span style="color: #a31515">"Date"</span>, FancyItemUpdated);
                }
            }
        }
</pre>
<p>Then I add a listener to my simple model that fires off it’s own update event when something changes in the fancy model event it’s subscribed to.</p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">SimpleItem </span>: <span style="color: #2b91af">ModelBase
        </span>{
            <span style="color: blue">public static event </span><span style="color: #2b91af">EventHandler </span>SimpleItemUpdated = <span style="color: blue">delegate </span>{ };

            <span style="color: blue">public </span>SimpleItem()
            {
                <span style="color: #2b91af">FancyItem</span>.FancyItemUpdated +=<span style="color: blue">new </span><span style="color: #2b91af">EventHandler</span>(FancyItem_FancyItemUpdated);
            }

            <span style="color: blue">void  </span>FancyItem_FancyItemUpdated(<span style="color: blue">object </span>sender, <span style="color: #2b91af">EventArgs </span>e)
            {
                 ModelPropertyChanged(<span style="color: #a31515">"updated"</span>, SimpleItemUpdated);
            }            

            <span style="color: blue">private static </span><span style="color: #2b91af">FancyItem </span>_item = <span style="color: blue">new </span><span style="color: #2b91af">FancyItem</span>();
            <span style="color: blue">public static </span><span style="color: #2b91af">FancyItem </span>Item
            {
                <span style="color: blue">get </span>{ <span style="color: blue">return </span>_item; }
                <span style="color: blue">set </span>{ _item = <span style="color: blue">value</span>; }
            }
        }
</pre>
<p>Then on the ViewModel, it subscribes to the SimpleItem model event and then notifies the PropertyChanged event.</p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">SimpleViewModel </span>: <span style="color: #2b91af">ViewModelBase
   </span>{
       <span style="color: blue">public static readonly </span><span style="color: #2b91af">AudioViewModel </span>Instance = <span style="color: blue">new </span><span style="color: #2b91af">AudioViewModel</span>();
       <span style="color: blue">public </span>SimpleViewModel()
       {
           <span style="color: green">// to subscribe to the event in the model we need to call the contstructor
           </span><span style="color: #2b91af">SimpleItem </span>mySimpleItem = <span style="color: blue">new </span><span style="color: #2b91af">SimpleItem</span>();
           <span style="color: #2b91af">SimpleItem</span>.SimpleItemUpdated +=<span style="color: blue">new </span><span style="color: #2b91af">EventHandler</span>(SimpleItem_SimpleItemUpdated);
       }

       <span style="color: blue">void  </span>SimpleItem_SimpleItemUpdated(<span style="color: blue">object </span>sender, <span style="color: #2b91af">EventArgs </span>e)
       {
            InvokePropertyChanged(<span style="color: #a31515">"MyFancyItem"</span>);
       }

       <span style="color: blue">public </span><span style="color: #2b91af">FancyItem </span>myFancyItem
       {
           <span style="color: blue">set
           </span>{
               <span style="color: blue">if </span>(<span style="color: #2b91af">SimpleItem</span>.Item != <span style="color: blue">value</span>)
               {
                   <span style="color: #2b91af">SimpleItem</span>.Item = <span style="color: blue">value</span>;
                   InvokePropertyChanged(<span style="color: #a31515">"MyFancyItem"</span>);
               }
           }
           <span style="color: blue">get </span>{ <span style="color: blue">return </span><span style="color: #2b91af">SimpleItem</span>.Item; }
       }
   }
</pre>
<p>It’s all a little crazy I know, but the idea here helps to extract the ViewModel from the underlying model even a step further.&nbsp; Then If I need to store and retrieve my model data from isolated storage or some other external location it’s just one item that I have to get and set from as apposed to each little part. </p>
<p>The best part is that my UI is always up to date.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanlane.com/2011/06/mvvm-model-notification-with-events/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Vision of the future of 3D printing</title>
		<link>http://www.ryanlane.com/2011/06/vision-of-the-future-of-3d-printing/</link>
		<comments>http://www.ryanlane.com/2011/06/vision-of-the-future-of-3d-printing/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 18:32:24 +0000</pubDate>
		<dc:creator>Ryan Lane</dc:creator>
				<category><![CDATA[Futurism]]></category>

		<guid isPermaLink="false">http://www.ryanlane.com/?p=188</guid>
		<description><![CDATA[<p> <p><a href="http://vimeo.com/12768578">FULL PRINTED</a> from <a href="http://vimeo.com/nueveojos">nueve ojos</a> on <a href="http://vimeo.com">Vimeo</a>.</p> <p>Cortometraje de animación para la exposición “Laboratori de Fabricació” en el museo Disseny HUB Barcelona.</p> <p>Junio 2010</p> <p>Disseny Hub Barcelona<br /> Duración: 4’<br /> Formato: HD 720<br /> Dirección: Carles Mora y Mariona Omedes<br /> Postproducción: Carles Mora, Mariona Omedes, Karin du Croo, Jordi [...]]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://player.vimeo.com/video/12768578?title=0&amp;byline=0&amp;portrait=0" width="549" height="309" frameborder="0"></iframe>
<p><a href="http://vimeo.com/12768578">FULL PRINTED</a> from <a href="http://vimeo.com/nueveojos">nueve ojos</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>Cortometraje de animación para la exposición “Laboratori de Fabricació” en el museo Disseny HUB Barcelona.</p>
<p>Junio 2010</p>
<p>Disseny Hub Barcelona<br />
Duración: 4’<br />
Formato: HD 720<br />
Dirección: Carles Mora y Mariona Omedes<br />
Postproducción: Carles Mora, Mariona Omedes, Karin du Croo, Jordi Ferrera y Josep Mª Balada<br />
Música: Micka Luna</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanlane.com/2011/06/vision-of-the-future-of-3d-printing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kinect, Maxscript and C#</title>
		<link>http://www.ryanlane.com/2011/05/kinect-maxscript-and-c-3/</link>
		<comments>http://www.ryanlane.com/2011/05/kinect-maxscript-and-c-3/#comments</comments>
		<pubDate>Wed, 18 May 2011 22:28:00 +0000</pubDate>
		<dc:creator>Ryan Lane</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ryanlane.com/2011/05/kinect-maxscript-and-c-3/</guid>
		<description><![CDATA[<p><br /> <p><a href="http://vimeo.com/22758164">Kinect, Maxscript and C# &#8211; 04</a> from <a href="http://vimeo.com/user1871550">ruben henares</a> on <a href="http://vimeo.com">Vimeo</a>.</p> <p>I have improved the framerate quite a lot since last time. It is almost ready to be used for production. At the moment I am grabbing the positions of the joints, next step is to grab the rotations and [...]]]></description>
			<content:encoded><![CDATA[<p><iframe style="width: 517px; height: 327px" height="327" src="http://player.vimeo.com/video/22758164?title=0&amp;byline=0&amp;portrait=0" frameborder="0" width="580"></iframe><br />
<blockquote>
<p><a href="http://vimeo.com/22758164">Kinect, Maxscript and C# &#8211; 04</a> from <a href="http://vimeo.com/user1871550">ruben henares</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>I have improved the framerate quite a lot since last time. It is almost ready to be used for production. At the moment I am grabbing the positions of the joints, next step is to grab the rotations and apply the tracking data to a skinned character. Stay tuned!</p>
</blockquote>
<p>Nicely done! </p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanlane.com/2011/05/kinect-maxscript-and-c-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kinect controlled drone at MIX11</title>
		<link>http://www.ryanlane.com/2011/04/kinect-controlled-drone-at-mix11/</link>
		<comments>http://www.ryanlane.com/2011/04/kinect-controlled-drone-at-mix11/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 00:10:34 +0000</pubDate>
		<dc:creator>Ryan Lane</dc:creator>
				<category><![CDATA[Futurism]]></category>
		<category><![CDATA[Robotics]]></category>
		<category><![CDATA[Drone]]></category>
		<category><![CDATA[Kinect]]></category>
		<category><![CDATA[MIX11]]></category>
		<category><![CDATA[NUI]]></category>

		<guid isPermaLink="false">http://www.ryanlane.com/?p=176</guid>
		<description><![CDATA[<p></p>]]></description>
			<content:encoded><![CDATA[<p><iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/sQdfJ4uAGoM" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanlane.com/2011/04/kinect-controlled-drone-at-mix11/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

