<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0"><channel><title>RIA Thoughts</title><link>http://riathoughts.com/</link><description>Silverlight, UX Design and Other Random Thoughts</description><generator>Graffiti CMS 1.0 (build 1.0.1.963)</generator><lastBuildDate>Wed, 24 Feb 2010 16:53:00 GMT</lastBuildDate><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ToCodeOrNotToCode" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="tocodeornottocode" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>Expression Blend: Designer Tool or Tool for Design</title><link>http://riathoughts.com/blog/silverlight/expression-blend-designer-tool-or-tool-for-design/</link><pubDate>Wed, 24 Feb 2010 16:53:00 GMT</pubDate><guid isPermaLink="true">http://riathoughts.com/blog/silverlight/expression-blend-designer-tool-or-tool-for-design/</guid><dc:creator>johnnystock</dc:creator><slash:comments>22</slash:comments><category domain="http://riathoughts.com/blog/silverlight/">Silverlight</category><description>&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="expression_blend_3_icon" border="0" alt="expression_blend_3_icon" align="right" src="http://riathoughts.com/files/media/image/WindowsLiveWriter/DesignerToolvs.ToolforDesign_9A13/expression_blend_3_icon_thumb.png" width="128" height="128" /&gt;Designer Tool:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;A piece of software focused on conceptual design work. Typically used by design professionals where creating original art is the main focus of their job.&amp;#160; – Unofficial Unpublished Stockton Dictionary of terms&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Tool for Design:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;A piece of software focused on production design work. Typically used by design professionals, production artists, web developers, Silverlight integrators and many others. Often design work is only a small portion of these professional’s job. – Unofficial Unpublished Stockton Dictionary of terms &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The differences above may be subtle, but they represent a fundamental change in the way Microsoft is marketing Expression Blend. Personally I love this change. Basically they are recognizing that not everyone that uses Blend is a designer even if they are performing design tasks. I’ll talk a little more about that in a bit. The words conceptual and production above are mine, not in the messaging from Microsoft but I feel they help to show the distinction. Not that Blend can’t be used for conceptual work, quite the contrary, I just meant to show that it can be used by non-traditional design professionals. Or even by those who don’t consider themselves design professionals. &lt;/p&gt;  &lt;p&gt;This isn’t causing a change is the way the tool works or its workflow. This doesn’t mean the Blend team is going to change the prioritization of one feature over another, at least not that I’m aware of. What is does mean is that the team knows that people like myself are quite proficient with Blend and it is an essential part of my workflow. &lt;/p&gt;  &lt;h4&gt;Will this change the way you work? &lt;/h4&gt;  &lt;p&gt;No, and maybe. &lt;/p&gt;  &lt;p&gt;I shied away from “it depends” since I’m not an architect . What I mean by that incredibly vague answer is that in general no, the change in messaging will not affect your day to day work. If you are a designer, you will continue doing design and if you are a developer you will continue to develop. But how it might affect you is if you fall into the small category of people that is beginning to call ourselves “Silverlight Integrators”. Integrators come from various backgrounds but typically either design or development. Our most common role in the process is to take static comps produced by a traditional designer and wire them up to the data and logic created by traditional developers. I’ll post more on this ever evolving role in a future article.&lt;/p&gt;  &lt;p&gt;The change this may bring about it a wider acknowledgement that part of what a Silverlight Integrator is doing is design work, but we are still developers. I believe that once our own companies understand this, our contributions will be greater understood and appreciated.&lt;/p&gt;  &lt;p&gt;At least I hope so.&lt;/p&gt;</description></item><item><title>Addressing the Pre-Loader Issue</title><link>http://riathoughts.com/blog/silverlight/addressing-the-pre-loader-issue/</link><pubDate>Thu, 11 Feb 2010 22:13:00 GMT</pubDate><guid isPermaLink="true">http://riathoughts.com/blog/silverlight/addressing-the-pre-loader-issue/</guid><dc:creator>johnnystock</dc:creator><slash:comments>5</slash:comments><category domain="http://riathoughts.com/blog/silverlight/">Silverlight</category><description>&lt;p&gt;A number of people left comments both here and at Channel 9 in response to my Pre-Loader / Splash Page post and show. Apparently people frequently run into an issue where when using a pre-loader, if the main app loads too quickly, neither app ends up loading correctly and the user is left with a blank white rectangle.&lt;/p&gt;  &lt;p&gt;Well, I appear to have a solution for you all to try. This is one of those things that is notoriously difficult to test so I’m going to ask that those of you that have run into this issue help me test it.&lt;/p&gt;  &lt;h4&gt;Solution&lt;/h4&gt;  &lt;p&gt;The basics of the solution are to have a JavaScript function execute when the host page loads. Have that method wait a specified length of time (1/2 second seems to work) and then check to see if either the pre-loader or the main Silverlight application are loaded. If neither one is true then you are probably in the state people were describing. In that case you can use another JavaScript function to manually load the main Silverlight application.&lt;/p&gt;  &lt;h4&gt;Example&lt;/h4&gt;  &lt;p&gt;Lets take a look at the specifics of how this works. &lt;/p&gt;  &lt;h6&gt;Disclaimer: For this example I’ve included everything in the HTML page itself for expediency but all of the JavaScript could easily be moved to separate files.&lt;/h6&gt;  &lt;p&gt;Page Loaded:&lt;/p&gt;  &lt;p&gt;There are a number of ways to execute a JavaScript function when the page loads, I’ll leave it to the reader to choose the method appropriate to their site. All I’ve done in this case (which is not when I’m recommending) is to just include a script block at the bottom of the page markup that calls the function as soon as the block is parsed.&lt;/p&gt;  &lt;div&gt;   &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt;     TestLoaded();&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;We’ll define the “TestLoaded” function shortly.&lt;/p&gt;

&lt;p&gt;Set Pre-Loader status:&lt;/p&gt;

&lt;p&gt;This is the exact function from my previous post, I’m just now also using the “started” variable to not only indicate if the animation has begun but also to indicate if the pre-loader itself is executing.&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; started = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; onSourceDownloadProgressChanged(sender, eventArgs) {&lt;br /&gt;    sender.findName(&lt;span style="color: #006080"&gt;&amp;quot;uxStatus&amp;quot;&lt;/span&gt;).Text = &lt;span style="color: #006080"&gt;&amp;quot;Loading: &amp;quot;&lt;/span&gt; + Math.round(eventArgs.progress * 100) + &lt;span style="color: #006080"&gt;&amp;quot;%&amp;quot;&lt;/span&gt;;&lt;br /&gt;    sender.findName(&lt;span style="color: #006080"&gt;&amp;quot;uxProgressBar&amp;quot;&lt;/span&gt;).Width = eventArgs.progress * 500;&lt;br /&gt;&lt;br /&gt;    sender.findName(&lt;span style="color: #006080"&gt;&amp;quot;TeaserText&amp;quot;&lt;/span&gt;).Text = teasers[Math.round(eventArgs.progress * 3)];&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!started) {&lt;br /&gt;        started = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;Set Silverlight Loaded status:&lt;/p&gt;

&lt;p&gt;Checking the Loaded status of the Silverlight application is another thing where there are numerous ways to accomplish but this is a simple one. All that is needed is to call a function when the plug-in loads as indicated by the param “onLoad”. In that function you can then flip a Boolean to true.&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; slLoaded = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; pluginLoaded(sender, args) {&lt;br /&gt;    slLoaded = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;br /&gt;}&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;And:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;param&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;onLoad&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;pluginLoaded&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;Check status:&lt;/p&gt;

&lt;p&gt;Now that you have ways to see the status of each item, we need to check them. Below we define the “TestLoaded” function to call a second function when a set time has elapsed, 500 milliseconds in this case. The second function, “ReportStatus”, checks to see if either variable has been se tot true and if not, calls yet another method to create the Silverlight object and inject into the original container.&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; TestLoaded() {&lt;br /&gt;    window.setTimeout(ReportStatus, 500);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; ReportStatus() {&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (started == &lt;span style="color: #0000ff"&gt;false&lt;/span&gt; &amp;amp;&amp;amp; slLoaded == &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;) {&lt;br /&gt;        silverlightControlHost.innerHTML = embedSilverlight(&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;sl1&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;row1&amp;quot;&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Inject Silverlight Application:&lt;/p&gt;

&lt;p&gt;This snippet shows the usage of the “createObject” method which is included in Silverlight.js. This method has parameters to allow you to add any params or initparams to the object just as you would declare them in html.&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; embedSilverlight(parentElement, pluginId, userContext) {&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; altHtml = pluginId == &lt;span style="color: #006080"&gt;&amp;quot;sl1&amp;quot;&lt;/span&gt; ? &lt;span style="color: #0000ff"&gt;null&lt;/span&gt; : &lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;!--not installed--&amp;gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Silverlight.createObject(&lt;span style="color: #006080"&gt;&amp;quot;ClientBin/SplashScreenExample.xap&amp;quot;&lt;/span&gt;,&lt;br /&gt;        parentElement, pluginId,&lt;br /&gt;        {&lt;br /&gt;            width: &lt;span style="color: #006080"&gt;&amp;quot;800&amp;quot;&lt;/span&gt;, height: &lt;span style="color: #006080"&gt;&amp;quot;500&amp;quot;&lt;/span&gt;,&lt;br /&gt;            background: &lt;span style="color: #006080"&gt;&amp;quot;white&amp;quot;&lt;/span&gt;, alt: altHtml,&lt;br /&gt;            version: &lt;span style="color: #006080"&gt;&amp;quot;3.0.40624.0&amp;quot;&lt;/span&gt;, autoUpgrade: &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;&lt;br /&gt;        },&lt;br /&gt;        { onError: onSilverlightError, onLoad: pluginLoaded },&lt;br /&gt;        &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, userContext);&lt;br /&gt;}&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;h4&gt;Finally&lt;/h4&gt;

&lt;p&gt;I know this post hasn't been very verbose but hopefully it will help you implement a solution to the non-loading Silverlight applications if you run into it. Below are links to a number of resources that are referenced or used in creating this solution.&lt;/p&gt;

&lt;p&gt;Good luck and please let me know if this works for your situation.&lt;/p&gt;

&lt;h4&gt;Links&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;My previous post: &lt;a title="http://riathoughts.com/blog/silverlight/silverlight-splash-page/" href="http://riathoughts.com/blog/silverlight/silverlight-splash-page/"&gt;http://riathoughts.com/blog/silverlight/silverlight-splash-page/&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;Silverlight TV Episode: &lt;a title="http://channel9.msdn.com/shows/SilverlightTV/Silverlight-TV-Episode-6-Creating-Custom-Pre-Loaders/" href="http://channel9.msdn.com/shows/SilverlightTV/Silverlight-TV-Episode-6-Creating-Custom-Pre-Loaders/"&gt;http://channel9.msdn.com/shows/SilverlightTV/Silverlight-TV-Episode-6-Creating-Custom-Pre-Loaders/&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;Loading Silverlight via JavaScript: &lt;a title="http://msdn.microsoft.com/en-us/library/cc265155(VS.95).aspx" href="http://msdn.microsoft.com/en-us/library/cc265155(VS.95).aspx"&gt;http://msdn.microsoft.com/en-us/library/cc265155(VS.95).aspx&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;Latest version of Silverlight.js: &lt;a title="http://code.msdn.microsoft.com/silverlightjs" href="http://code.msdn.microsoft.com/silverlightjs"&gt;http://code.msdn.microsoft.com/silverlightjs&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;Calling managed code from Silverlight: &lt;a title="http://msdn.microsoft.com/en-us/library/cc221414(VS.95).aspx" href="http://msdn.microsoft.com/en-us/library/cc221414(VS.95).aspx"&gt;http://msdn.microsoft.com/en-us/library/cc221414(VS.95).aspx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Silverlight Splash Page</title><link>http://riathoughts.com/blog/silverlight/silverlight-splash-page/</link><pubDate>Wed, 03 Feb 2010 23:27:00 GMT</pubDate><guid isPermaLink="true">http://riathoughts.com/blog/silverlight/silverlight-splash-page/</guid><dc:creator>johnnystock</dc:creator><slash:comments>15</slash:comments><category domain="http://riathoughts.com/blog/silverlight/">Silverlight</category><description>&lt;p&gt;&lt;a href="http://channel9.msdn.com/shows/SilverlightTV/"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SilverlightTV" border="0" alt="SilverlightTV" align="right" src="http://riathoughts.com/files/media/image/WindowsLiveWriter/SilverlightSplashPage_8297/SilverlightTV_3.png" width="152" height="70" /&gt;&lt;/a&gt; I recently had the privilege of recording an episode of &lt;a href="http://channel9.msdn.com/shows/SilverlightTV/" target="_blank"&gt;Silverlight TV&lt;/a&gt; with John Papa where we discussed the creation of Splash pages in Silverlight. This post is a companion post to that episode so if you haven’t watched it yet, be sure to check it out after (or before) reading this post.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://riathoughts.com/files/uploads/SplashScreenExample.zip"&gt;Sample code download&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;What is a Splash Page&lt;/h4&gt;  &lt;p&gt;Let me be clear about this, when I mention splash page I’m referring to a custom loading screen. This is a lightweight Silverlight application that runs while your main Silverlight application is downloading. Typically these will include things like progress bars, user tips, humorous statements or even news headlines.&lt;/p&gt;  &lt;p&gt;What these are not is the “Click here to Enter” screens that were so popular a decade ago. Please never build one of those. Ever.&lt;/p&gt;  &lt;p&gt;Why do you need to build a custom splash page? The reasons are numerous but what it boils down to is keeping your users engaged so they don’t leave before your application is downloaded.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://riathoughts.com/files/media/image/WindowsLiveWriter/SilverlightSplashPage_8297/defaultloading_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Loading nebula" border="0" alt="Loading nebula" align="right" src="http://riathoughts.com/files/media/image/WindowsLiveWriter/SilverlightSplashPage_8297/defaultloading_thumb.png" width="177" height="180" /&gt;&lt;/a&gt;Unfortunately, many great Silverlight applications do not have a good loading experience currently. This is partially due to the environments in which we develop and test our applications. If we never notice a slow load time, we may never realize that it is needed. &lt;/p&gt;  &lt;p&gt;Luckily for us, the Silverlight team didn’t forget about the need for a good loading experience. They did several things to make loading a decent experience. First, they created a simple animation (like the one at right) that runs whenever a xap file takes longer than .5 seconds to load. Second, they added some simple hooks to allow us to replace that default experience, with one of our own making. I’ll be talking more about these hooks in a bit.&lt;/p&gt;  &lt;h5&gt;Not Silverlight 1&lt;/h5&gt;  &lt;p&gt;There is a common misconception when it comes to splash pages in Silverlight that you have to use Silverlight 1.0 to create them. While there is a basis for this, it’s not quite right. What you ARE limited to is the JavaScript API, but that is not the same as Silverlight 1.0. You actually can use any control or feature in whatever version the user is running [#1] as long as it is included in the core runtime, not in an external assembly. In practice what this means is that you can use things like Grids, StackPanels or Easing Functions but you cannot use the DataGrid, Behaviors or custom control libraries.&lt;/p&gt;  &lt;h4&gt;How to Build a Splash Page&lt;/h4&gt;  &lt;p&gt;Throughout this post I will show you how to build a simple splash page and how to add the features most commonly used in them. Hopefully this will give you enough information to be able to build custom loading experiences that are suited to the application you are building and the brand it represents.&lt;/p&gt;  &lt;h5&gt;Simulating load time&lt;/h5&gt;  &lt;p&gt;&lt;a href="http://riathoughts.com/files/media/image/WindowsLiveWriter/SilverlightSplashPage_8297/PropertiesOutline_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Properties Pane" border="0" alt="Properties Pane" align="right" src="http://riathoughts.com/files/media/image/WindowsLiveWriter/SilverlightSplashPage_8297/PropertiesOutline_thumb.png" width="242" height="189" /&gt;&lt;/a&gt;I mentioned earlier that part of the reason we forget to create loading screens is that we never see a long download time. This also can make it hard to see how your new splash page will look and act if it is only displayed for .7 seconds. Luckily, there are ways to simulate a slow connection to allow you to test your app. The basics are simple, add a huge file to your application. There are a couple extra steps you need to perform to make sure it fulfills it’s role.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Add a very large file (&amp;gt; 75Mb) to your application in Visual Studio. I recommend the high quality WMV of a Silverlight TV episode. &lt;/li&gt;    &lt;li&gt;Set the Build Action property to Content &lt;/li&gt;    &lt;li&gt;Set the Copy to Output Directory property to Copy if newer &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Adding a large file like this should give you several seconds of loading time even on the Cassini web server that is integrated with Visual Studio.&lt;/p&gt;  &lt;h5&gt;Getting Started&lt;/h5&gt;  &lt;p&gt;&lt;a href="http://riathoughts.com/files/media/image/WindowsLiveWriter/SilverlightSplashPage_8297/MSDNSample_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="MSDNSample" border="0" alt="MSDNSample" align="right" src="http://riathoughts.com/files/media/image/WindowsLiveWriter/SilverlightSplashPage_8297/MSDNSample_thumb.png" width="242" height="152" /&gt;&lt;/a&gt; When you are first learning how to build splash screens, it’s nice to have somewhere to begin. Luckily, there is a page on MSDN that provides you with a starter screen that you can then customize or replace as you create your own experience. &lt;a href="http://msdn.microsoft.com/en-us/library/cc903962(VS.95).aspx" target="_blank"&gt;How to: Define a Simple Silverlight Splash Screen&lt;/a&gt; walks you through the steps and give you the code to create a splash screen that contains a simple progress bar with % complete.&lt;/p&gt;  &lt;p&gt;Everything in this post is based on what you will learn and the files created when going through that how to document. The basic pieces you should take away from that are the Object Params that are needed, the loose XAML page, and how JavaScript interacts with with the XAML page. We will talk about each of these items below.&lt;/p&gt;  &lt;h5&gt;Params&lt;/h5&gt;  &lt;p&gt;There are three separate Object Params that come into play when dealing with Splash pages, two of them are in the MSDN example and those are most likely the only ones you will need. All of these are detailed in the MSDN page but only two of them are used.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;splashscreensource&lt;/strong&gt;&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;param&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;splashscreensource&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;FullSample.xaml&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;The splashscreenscource is the file that contains the xaml for your splash experience. This is a “loose” xaml file that lives in your website, not in your Silverlight application. To add it through the Visual Studio 2008 “Add New Item” dialog, look for the template titled: Silverlight JScript Page. This template will create a .xaml and a .js file with the given name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;onsourcedownloadprogresschanged&lt;/strong&gt;&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;param&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;onSourceDownloadProgressChanged&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;onSourceDownloadProgressChanged&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;The value of this param is the name of a JavaScript function that gets called every time the download progress changes. This is very useful in wiring up things like progress bars, download percentage and for kicking off other events. Examples of all of these will be given later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;onsourcedownloadcomplete&lt;/strong&gt;&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;param&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;onsourcedownloadcomplete&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;onsourcedownloadcomplete&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;Similar to onsourcedownloadprogresschanged, this param’s valus is a JavaScript function name, but this one fires only when the main Silverlight application is fully downloaded. This is the least commonly used of the Params but can still be useful. It is not used in the MSDN example and you will most likely not use it often either, but it’s nice to know it’s there. Possible uses for this event are the cleaning up of running JS routines or for kicking off a final animation or message. Just be aware that once this event fires the main app displays too fast to see the results of the function so you should plan accordingly.&lt;/p&gt;

&lt;h5&gt;Using Expression Blend&lt;/h5&gt;

&lt;p&gt;Typically when people look at het splash page examples out there they get scared off because most of them use the Canvas as the base element and stick to Silverlight 1.0 XAML. This is further perpetuated by the fact that Expression Blend 3 looks at the loose .xaml file and throws up a message saying it cannot edit Silverlight 1 apps. Well, You are not limited to Silverlight 1 and you can use Blend, you just need to trick it.&lt;/p&gt;

&lt;p&gt;The easiest way to use Expression Blend to build your splash page is to create a dummy page in your Silverlight application and use that for creating the design in Blend. Once you have everything the way to want it just copy the XAML into the loose .xaml page in your web project. There are a few caveats to using this approach however:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;You CANNOT use resources from an external resource library, like app.xaml for instance. &lt;/li&gt;

  &lt;li&gt;You CAN use a resource region in the page itself. &lt;/li&gt;

  &lt;li&gt;You CANNOT use the C# (or VB.Net) code behind file to wire things up. &lt;/li&gt;

  &lt;li&gt;You CAN use the associated .js file to kick off animation or change object properties. &lt;/li&gt;

  &lt;li&gt;You CANNOT use external libraries or object definitions. &lt;/li&gt;

  &lt;li&gt;You CAN use anything native to the Silverlight runtime. &lt;/li&gt;

  &lt;li&gt;You CAN create storyboards in the .xaml file. &lt;/li&gt;

  &lt;li&gt;You CAN use easing functions. &lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Progress Bar &amp;amp; Download Percentage&lt;/h5&gt;

&lt;p&gt;The example in the MSDN page shows one way to wire up a progress bar, but it’s not the only way. You are only limited by your imagination (or that or your design team) in what you can do here.&lt;/p&gt;

&lt;p&gt;The only thing that is required is in the function that gets called by the onSourceDownloadProgressChanged event uses the eventArgs.progress value to modify a property of one of your XAML objects to show the download progress. Typically this is the width or scale of a rectangle that gets modified so that it grows longer as the download percentage increases. The two code examples below accomplish roughly te same task but in different ways.&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;sender.findName(&lt;span style="color: #006080"&gt;&amp;quot;uxProgressBar&amp;quot;&lt;/span&gt;).ScaleY = eventArgs.progress * 356;&lt;br /&gt;sender.findName(&lt;span style="color: #006080"&gt;&amp;quot;uxStatus&amp;quot;&lt;/span&gt;).Text = &lt;span style="color: #006080"&gt;&amp;quot;Loading: &amp;quot;&lt;/span&gt; + Math.round((eventArgs.progress * 1000)) / 10 + &lt;span style="color: #006080"&gt;&amp;quot;%&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008000"&gt;//OR&lt;/span&gt;&lt;br /&gt;sender.findName(&lt;span style="color: #006080"&gt;&amp;quot;uxProgressBar&amp;quot;&lt;/span&gt;).Width = eventArgs.progress * 500;&lt;br /&gt;sender.findName(&lt;span style="color: #006080"&gt;&amp;quot;uxStatus&amp;quot;&lt;/span&gt;).Text = &lt;span style="color: #006080"&gt;&amp;quot;Loading: &amp;quot;&lt;/span&gt; + Math.round(eventArgs.progress * 100) + &lt;span style="color: #006080"&gt;&amp;quot;%&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h5&gt;Changing Text&lt;/h5&gt;

&lt;p&gt;While things like a progress bar and download percentage are fairly straight forward, there are a few other things you can also do that can add interest to your splash screen. One great example of this is changing a bit of text periodically. This can keep the user engaged or even entertained while they wait for your application to download. The basics of this are simple:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; teasers = [&lt;span style="color: #006080"&gt;&amp;quot;It's loading, I promise.&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;Still loading&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;Almost here!&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;Ready?&amp;quot;&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; onSourceDownloadProgressChanged(sender, eventArgs) {&lt;br /&gt;    sender.findName(&lt;span style="color: #006080"&gt;&amp;quot;TeaserText&amp;quot;&lt;/span&gt;).Text = teasers[Math.round(eventArgs.progress * 3)];&lt;br /&gt;}&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;In the above example I’m changing the text of a TextBlock with strings contained in an array based on the percentage downloaded. It would also be easy to tie text changes to a timer that starts when the download begins.&lt;/p&gt;

&lt;h5&gt;Animations&lt;/h5&gt;

&lt;p&gt;One of the (few) things the public seems to know about Silverlight is that it can do great animations. You can, and in many cases should, include these animations in your splash pages as well. So one question that typically arises from this is: With no Code Behind and no Behaviors, how to we start animations? Well, JavaScript of course.&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; started = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; onSourceDownloadProgressChanged(sender, eventArgs) {&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!started) {&lt;br /&gt;        sender.findName(&lt;span style="color: #006080"&gt;&amp;quot;BallDrop&amp;quot;&lt;/span&gt;).begin();&lt;br /&gt;        started = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;The above example shows how to start an animation named “BallDrop” the first time the function is called and set a flag to ensure that it doesn’t attempt to start the animation over and over. Once again you could also start an animation based on time elapsed or a certain percentage downloaded.&lt;/p&gt;

&lt;h5&gt;Cleaning up&lt;/h5&gt;

&lt;p&gt;Once you’ve created the perfect splash page that will keep your users entertained and engaged while waiting for your huge Silverlight application to load, there are a couple more things you may want to do. If you’ve taken the approach I outline in this post, you still need to remove a couple of files from your Silverlight application project. You definitely don’t want the large file that simulates slow download speed to be part of your deployed application, so go ahead and delete that now. Also, if you used a dummy page to enable the use of Expression Blend in designing your page, you should take that out of your production code as well.&lt;/p&gt;

&lt;h4&gt;Tips&lt;/h4&gt;

&lt;p&gt;Here are a few random tips to think about when building your splash page.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Use the same background in your splash page as in your main application. &lt;/li&gt;

  &lt;li&gt;Add a transition to bring in your main application when it loads instead of it just “popping” in when it loads. &lt;/li&gt;

  &lt;li&gt;Keep the same look and feel in your splash page as your main application. &lt;/li&gt;

  &lt;li&gt;Display functionality tips during on the splash screen to educate your users. &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Final Words&lt;/h4&gt;

&lt;p&gt;I know this has been a lot to cover in this post but I hope it has given you the knowledge needed to implement your own splash page. Feel free to ask me questions on twitter (&lt;a href="http://twitter.com/johnnystock"&gt;@johnnystock&lt;/a&gt;) or here in the comments.&lt;/p&gt;

&lt;h5&gt;Footnotes&lt;/h5&gt;

&lt;p&gt;#1. As of the writing of this post, Silverlight 3 is released and Silverlight 4 is in Beta&lt;/p&gt;</description></item><item><title>The Illusion of Performance</title><link>http://riathoughts.com/blog/the-illusion-of-performance/</link><pubDate>Wed, 13 Jan 2010 15:52:00 GMT</pubDate><guid isPermaLink="true">http://riathoughts.com/blog/the-illusion-of-performance/</guid><dc:creator>johnnystock</dc:creator><slash:comments>14</slash:comments><category domain="http://riathoughts.com/blog/">Blog</category><description>&lt;p&gt;&lt;a href="http://riathoughts.com/files/media/image/WindowsLiveWriter/TheIllusionofPerformance_6E37/meter.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 5px; display: inline; border-top: 0px; border-right: 0px" title="meter" border="0" alt="meter" align="right" src="http://riathoughts.com/files/media/image/WindowsLiveWriter/TheIllusionofPerformance_6E37/meter_thumb.jpg" width="212" height="244" /&gt;&lt;/a&gt; There is a modern UX concept, which I hope you are all using, called perceived performance. While I call this a UX concept, it’s not something you will see on wireframes, redlines or a SketchFlow demo.&amp;#160; This is something that typically has to be architected into an application and built out by a developer. It is also something that is difficult to quantify so explaining it to your clients can be difficult at times.    &lt;br /&gt;&lt;/p&gt;  &lt;h4&gt;Definition&lt;/h4&gt;  &lt;p&gt;According to &lt;a href="http://en.wikipedia.org/wiki/Perceived_performance" target="_blank"&gt;WikiPedia&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Perceived performance&lt;/strong&gt;, in computer engineering, refers to how quickly a software feature appears to perform its task. The concept applies mainly to user acceptance aspects.&lt;/p&gt;    &lt;p&gt;The amount of time an application takes to start up, or a file to download, is not changed by showing a startup screen or a file progress dialog box. However, it satisfies some human needs: it &lt;em&gt;appears&lt;/em&gt; faster to the user as well as providing a visual cue to let them know the system is handling their request.&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;Practice&lt;/h4&gt;  &lt;p&gt;   &lt;br /&gt;What this means in practice is using various means to decrease the time in which the user cannot interact with the app / site. This is typically done using one of a few techniques.     &lt;br /&gt;The most common approach is to not download the entire app at one time but to download parts of it in the background. The issue with this approach is that it is sometimes hard to predict what parts of the app the user is going to want next.&amp;#160; Sometimes the downloading of deeper pieces of the application are dependent on user action (i.e. don’t download a section until it is asked for.    &lt;br /&gt;Another variation on this approach is to break a large app into numerous smaller apps. That way only one piece at a time are downloaded and each is (hopefully) small enough that the user does not experience ‘bad’ performance.    &lt;br /&gt;&lt;/p&gt;  &lt;h4&gt;Problems&lt;/h4&gt;  &lt;p&gt;   &lt;br /&gt;While using these techniques generally make a site more user friendly, sometimes there are issues that come up as well. I’m not talking about technical issues but client / management issues. For years, the most common measurement of site performance has been something known as TTLB (time to last byte). What TTLB measures is the amount of time from the initial page request until the final bit is downloaded to the browser, this includes markup, images, xap files any anything else. The problem comes when you add a solution taking advantage or perceived performance to a client that is used to using TTLB to measure site performance. Their stats are going to show those pages as performing poorly when the “bad” number is by design.    &lt;br /&gt;&lt;/p&gt;  &lt;h4&gt;Solutions&lt;/h4&gt;  &lt;p&gt;   &lt;br /&gt;How do we go about addressing this problem? This isn’t a problem you’re going to find a technical solution for. I’m not going to be able to give you a code sample to make the client’s stats look better. The solution in this case is education. You need to make sure that the client understands what you are doing before you even start, and that their TTLB stats are not going to tell the entire story. You also need to be ready for a few weeks after the site is live and he brings out his numbers telling you how bad those pages are preforming. He’s a client, I’m sure he’s busy so he has undoubtedly forgotten all about you explaining that bit to him. Be patient, expect that it is coming and explain it again.&lt;/p&gt;</description></item><item><title>My Mix10 Sessions – I hope</title><link>http://riathoughts.com/blog/silverlight/my-mix10-sessions-ndash-i-hope/</link><pubDate>Tue, 05 Jan 2010 23:15:00 GMT</pubDate><guid isPermaLink="true">http://riathoughts.com/blog/silverlight/my-mix10-sessions-ndash-i-hope/</guid><dc:creator>johnnystock</dc:creator><slash:comments>10</slash:comments><category domain="http://riathoughts.com/blog/silverlight/">Silverlight</category><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://visitmix.com/opencallvote/?query=John Stockton" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 5px; display: inline; border-top: 0px; border-right: 0px" title="Mix10_Vote_grn_240_3" border="0" alt="Mix10_Vote_grn_240_3" align="right" src="http://riathoughts.com/files/media/image/WindowsLiveWriter/Mix10SessionsIhope_9E2A/Mix10_Vote_grn_240_3_3.jpg" width="180" height="240" /&gt;&lt;/a&gt; Once again it’s almost time for Microsoft’s premier conference for anyone involved in the web: Mix. Building upon the success of last year, I am hoping to present again this year. This time though, things are a bit different. I can’t just schmooze a bunch of MS corporate types to try get a session approved, it’s not them making the decision. It’s you.&lt;/p&gt;  &lt;p&gt;That’s right, this year you are the ones deciding on ten sessions you want to see. I’m sure the voting will be fierce and the competition tight. A lot of good speakers have submitted a lot of good talks.&lt;/p&gt;  &lt;p&gt;I’ve pulled together thoughts on five potential Mix talks, which are all detailed below. Hopefully you all will find some of them useful enough to vote on them.&lt;/p&gt;  &lt;p&gt;So without further ado, below are the sessions I’ve submitted to Mix, please do me a favor and &lt;a href="http://visitmix.com/opencallvote/?query=John Stockton" target="_blank"&gt;vote&lt;/a&gt; for them all :).&lt;/p&gt;  &lt;h3&gt;i18n L10n W1F? - Making your Silverlight apps international friendly&lt;/h3&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Abstract: &lt;/strong&gt;We all know that the web has made us one large global community. Whether you are building apps for huge multi-national conglomerates or for the neighborhood taco stand, you are probably going to need to support multiple languages and potentially, different currencies or time/date formats. Come learn how to use the new BiDi and RTL text support combined with FlowDirection and data binding to create Silverlight apps that are fully internationalized. This session will demonstrate not only the code required for supporting language and culture but will also give some general tips, tricks and best practices for dealing with international sites.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Using Silverlight to enhance your already-rich internet application&lt;/h3&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Abstract: &lt;/strong&gt;You’ve just built a killer web application using jQuery and the latest web standards. What are you going to do with it now? Find out how you can use Silverlight to accent and enhance your solution. We’ll discuss techniques used to build JavaScript RIA experiences and discuss tricks you can do easily with Silverlight that are difficult, if not impossible, with a JavaScript-only solution.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Building engaging touch-based experiences using Silverlight&lt;/h3&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Abstract:&lt;/strong&gt; We no longer live in a world where we can assume that users of our applications will be using a mouse. A quick tour of tools and APIs you can use to build rich experiences you manipulate using your fingers. We’ll discuss the multi-touch support provided by Windows 7 and Silverlight 3 and how to extend it using several of the community created SDKs and Blend behaviors in your Silverlight applications.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Enhancing the SharePoint 2010 user experience via jQuery and the Client Object Model&lt;/h3&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Abstract:&lt;/strong&gt; The out-of-the-box UI for SharePoint 2010 is already improved from previous versions of SharePoint. Find out how you can use the jQuery API, combined with the SharePoint Client Object Model, to enhance the user experience with engaging visuals and allow your users to complete their tasks more efficiently.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Using the Expression Encoder API from WPF&lt;/h3&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Abstract:&lt;/strong&gt; What do you do when you need to add a voiceover to an existing video within your own application? Coding up a full video editing application is probably beyond the scope of most applications so luckily Expression Encoder has an SDK so we can add some advanced video capabilities to our own applications. Join me as I guide you through getting started with the API and we discuss some of the issues that may arise while coding your app.&lt;/p&gt;</description></item><item><title>Ascentium is hiring!</title><link>http://riathoughts.com/blog/ascentium/ascentium-is-hiring/</link><pubDate>Fri, 11 Sep 2009 22:02:00 GMT</pubDate><guid isPermaLink="true">http://riathoughts.com/blog/ascentium/ascentium-is-hiring/</guid><dc:creator>johnnystock</dc:creator><slash:comments>45</slash:comments><category domain="http://riathoughts.com/blog/ascentium/">Ascentium</category><description>&lt;p&gt;This week I passed one year at &lt;a href="http://www.ascentium.com/"&gt;Ascentium&lt;/a&gt; and I can say it’s been one heck of a ride. As with any job there have been highs and lows but overall it’s been one of my favorite years of work. Getting to work on cool Silverlight applications for major clients has been a great experience.&lt;/p&gt;  &lt;p&gt;Now, I’d like to share that experience with some of you in our Bellevue office. We actually have three different positions open at various levels and skill sets. Keep reading if you are interested in working for a company that was just named one of the &lt;a href="http://www.marketwatch.com/story/ascentium-named-one-of-washingtons-best-companies-to-work-for-2009-09-10"&gt;best places to work in Washington&lt;/a&gt;.&lt;/p&gt;  &lt;h4&gt;Web Application Developer&lt;/h4&gt;  &lt;p&gt;This person needs a nice mix of skills ranging from &lt;strong&gt;Silverlight&lt;/strong&gt; to ASP.NET to CSS/JavaScript. You would be responsible for doing high-visibility work on one of the most visited sites on the internet. This person needs to be an ambitious team-player that has a proven history of producing top-quality work.&lt;/p&gt;  &lt;h4&gt;Application Developer&lt;/h4&gt;  &lt;p&gt;For this position we are looking for a senior level LAMP developer with architecture skills. Duties of this role include leading other developers and interfacing with clients. Strong open source experience/skills are key but the ability to jump into C# when needed would be a major plus. The ideal candidate would also need to be comfortable with standards based web development. Relocation may be available for the right candidate.&lt;/p&gt;  &lt;h4&gt;Web Developer – Contract&lt;/h4&gt;  &lt;p&gt;We are also looking for a contract web developer with strong standards based web development skills. Must be proficient and experienced with jQuery, cross-browser development and web accessibility. Any experience with building Facebook applications is a plus.&lt;/p&gt;  &lt;p&gt;If you are interested in any of these positions please check out the official &lt;a href="http://www.jobvite.com/CompanyJobs/Careers.aspx?c=q5W9VfwP&amp;amp;cs=9cc9Vfwc&amp;amp;jvregion=Bellevue / Seattle&amp;amp;page=JobLocation"&gt;job listings&lt;/a&gt; and submit a resume.&lt;/p&gt;</description></item><item><title>Silverlight MVP!</title><link>http://riathoughts.com/blog/silverlight/silverlight-mvp/</link><pubDate>Wed, 01 Jul 2009 06:36:00 GMT</pubDate><guid isPermaLink="true">http://riathoughts.com/blog/silverlight/silverlight-mvp/</guid><dc:creator>johnnystock</dc:creator><slash:comments>30</slash:comments><category domain="http://riathoughts.com/blog/silverlight/">Silverlight</category><description>&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="MVP Logo" border="0" alt="MVP Logo" align="right" src="http://riathoughts.com/files/media/image/WindowsLiveWriter/SilverlightMVP_D0B7/o_MVP_FullColor_ForScreen_3.png" width="130" height="204" /&gt; I had the honor this week of being named a Microsoft Silverlight MVP! For those of you that don’t know what the MVP program is all about can read about it &lt;a href="http://mvp.support.microsoft.com/"&gt;here&lt;/a&gt;. Basically this is acknowledgment by Microsoft of the commitment to community and technical expertise of individuals based on their activities over the past year.&lt;/p&gt;  &lt;p&gt;I have received numerous congratulations messages over the last couple of days, more than I can mention or even respond to. Thank you all for the kind words, I have appreciated all of them. The sentiment that I think sums it all up came from my wife:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;You’ve gone from the guy who sits on the back porch talking about what he is going to do, to the guy who does it.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I find myself in good company once again. Not only are the existing MVPs a wonderfully helpful and intelligent group of people, but this freshman class has numerous people that I have worked with over the last year including (but probably not limited to):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Sarah Dutkiewicz &lt;/li&gt;    &lt;li&gt;Michael Eaton &lt;/li&gt;    &lt;li&gt;Nate Kohari &lt;/li&gt;    &lt;li&gt;David Kelley &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I am honored to be among this group of amazing professionals. Thank you all for coming along with me during this past (very busy) year. Let’s see what we get done next year.&lt;/p&gt;  &lt;p&gt;And apparently you don't have to wear short shorts to be an MVP (reference to the OTHER John Stockton). &lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="stockton" border="0" alt="stockton" align="left" src="http://riathoughts.com/files/media/image/WindowsLiveWriter/SilverlightMVP_D0B7/stockton_3.jpg" width="100" height="140" /&gt; :)&lt;/p&gt;</description></item><item><title>Web v.Next</title><link>http://riathoughts.com/blog/web-v-next/</link><pubDate>Tue, 02 Jun 2009 05:49:00 GMT</pubDate><guid isPermaLink="true">http://riathoughts.com/blog/web-v-next/</guid><dc:creator>johnnystock</dc:creator><slash:comments>35</slash:comments><category domain="http://riathoughts.com/blog/">Blog</category><description>&lt;p&gt;We are entering a new phase in the evolution of the web, and it’s not “Web 3.0”.&lt;/p&gt;  &lt;p&gt;The phrase “Web 3.0” is generally used to refer to the semantic web. That phrase in itself typically needs some explanation so for the purposes of this article I’ll use the definition of a web that provides meaning instead of content. While I fully agree that this is happening, and I think it’s happening faster than many would have you believe, the new phase we are entering is bigger than that. Much bigger.&lt;/p&gt;  &lt;p&gt;We are at an interesting time in the history of the Web. While many people have been nearly blinded by the speed at which new technologies have been being released for the past few years, those that have their eyes open are seeing some interesting things begin to happen. There are a number of technologies that are all maturing at around the same time that when combined, allow us to do things that have been purely theoretical up until now. This combination of technologies allow us to create truly great user experiences by creating interfaces that show the user what they want to see and in the way they want to see it. How is this different than what we’ve been doing already? Give me a minute or two and I’ll tell you.&lt;/p&gt;  &lt;h4&gt;What am I talking about?&lt;/h4&gt;  &lt;p&gt;The technologies that are all coming of age are in multiple different categories including semantic markup (RDF, OWL, SMIL, etc.), advanced / intelligent search capabilities (&lt;a href="http://www.bing.com"&gt;Bing&lt;/a&gt;, &lt;a href="http://www.wolframalpha.com/"&gt;Wolfram|Alpha&lt;/a&gt;, FAST etc.), social media (&lt;a href="http://www.facebook.com"&gt;Facebook&lt;/a&gt;, &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt;, &lt;a href="http://www.linkedin.com/"&gt;LinkedIn&lt;/a&gt; etc.) and RIA frameworks (Flash, Flex, Silverlight etc.). Just think of the possibilities when these technologies are all used together. It is now possible to create an application that knows who the user is and what they are likely to be interested in (Social Media), knowledge of not only that content exists but what that content means (semantic markup), the ability to find content not only with keywords but with meaning (advanced search) and the ability to display all this in an interactive natural way for the user (RIA frameworks). This allows us to create applications that are highly &lt;em&gt;relevant&lt;/em&gt; to the users wants and needs, which is a big step beyond today’s &lt;em&gt;customized&lt;/em&gt; applications. &lt;/p&gt;  &lt;h4&gt;Public Uses&lt;/h4&gt;  &lt;p&gt;The possible implementations on the public web are limited only by your imagination, time and budget. One example that comes to mind could be some sort of social media aggregator that goes beyond what has been seen to date. Something that searches all of your networks, attempts to derive meaning from each tweet, post, fan, poke and whatever else your networks do. It could then condense all of that information to provide you with trending topics and attitudes, general attitudes &amp;amp; groupings of friends, maybe create a 3D mind-map style view of how all of your friends know each other. I’m sure with just a few minutes of thinking, each of you can come up several uses of this kind of knowledge. &lt;/p&gt;  &lt;h4&gt;Intranet Uses&lt;/h4&gt;  &lt;p&gt;This combination of technologies not only works on the public web, but can be even more powerful when used on a company Intranet. A typical mid to large sized company will have multiple systems in place that currently don’t know anything about each other. At the very least they will probably have an email application and a document repository of some sort. Many business will also have some combination of CRM, ERP, CMS and several others. Throw in domain specific knowledge which is typically in some form of relational database and you can have quite a large number of separate systems that most often have no knowledge of each other.&lt;/p&gt;  &lt;p&gt;While it is no small task, it is possible to bring all of these separate systems together into a single interface that has knowledge of who the user is, what accounts / customers / projects they are interested in, what they have permission to see and what all of the related pieces are. This system could even be built in such a way as to increase visibility into the system by exposing data that may have been previously hidden through abstraction or by displaying related items throughout the system whenever an item is viewed. You could even improve workflows by creating forms or views that span multiple systems. Now, most of this is possible without using the newer technologies, but if you do use them, you can provide even more value for your users.&lt;/p&gt;  &lt;h4&gt;What’s Next&lt;/h4&gt;  &lt;p&gt;Well, we need to build these kinds of sites. The technology is there and ripe for the usage, now we need people to come up with some novel applications of these technologies. Let me know when you find them as I’m sure they are already being built. Who knows, maybe I’ll build one myself.&lt;/p&gt;</description></item><item><title>I’m Speaking at Mix09!</title><link>http://riathoughts.com/blog/i-rsquo-m-speaking-at-mix09/</link><pubDate>Tue, 24 Feb 2009 18:18:00 GMT</pubDate><guid isPermaLink="true">http://riathoughts.com/blog/i-rsquo-m-speaking-at-mix09/</guid><dc:creator>johnnystock</dc:creator><slash:comments>17</slash:comments><category domain="http://riathoughts.com/blog/">Blog</category><description>&lt;p&gt;Wow.&lt;a href="http://2009.visitmix.com/Default.aspx"&gt;&lt;img title="MIX09_SpeakerBling_VegasStrip_136x186" style="border-right: 0px; border-top: 0px; display: inline; margin: 0px 5px 0px 10px; border-left: 0px; border-bottom: 0px" height="188" alt="MIX09_SpeakerBling_VegasStrip_136x186" src="http://riathoughts.com/files/media/image/WindowsLiveWriter/ImSpeakingatMix09_8A78/MIX09_SpeakerBling_VegasStrip_136x186_3.jpg" width="138" align="right" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Just like a few hundred other people, I submitted a few talks to Mix when the call for speakers was open. And just like most of them, my talk were turned down. Luckily for me though, my employer also submitted a few talks and one of those was accepted, so I get to present anyway!&lt;/p&gt;  &lt;p&gt;The proposal and much of the presentation was written by a couple colleagues of mine: &lt;a href="http://twitter.com/jaredeischen"&gt;Jared Eischen&lt;/a&gt; and &lt;a href="http://twitter.com/JMatthiesen"&gt;Jordan Matthiesen&lt;/a&gt; with help also from &lt;a href="http://twitter.com/Tomascak"&gt;Andy Tomascak&lt;/a&gt;. That’s not to say that I have nothing to do with it, but I can’t claim all the credit (even if I want to :) ). &lt;/p&gt;  &lt;p&gt;Here’s the official abstract:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Using Microsoft ASP.NET MVC to Easily Extend a Web Site into the Mobile Space       &lt;br /&gt;&lt;/strong&gt;Learn how to build mobile Web sites using the ASP.NET MVC framework. See how to create customized mobile experiences by extending the Views in the MVC framework and using the latest device detection techniques.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;As you can see we will be talking about using ASP.MVC for building mobile websites. If you are involved in planning, designing or building webites (and who at Mix isn’t) you need to be involved in the mobile space. We will tell you the why and the how of getting your sites into this critical space.&lt;/p&gt;  &lt;p&gt;Come join us, it’s sure to be a good session.&lt;/p&gt;  &lt;h4&gt;Book Signing&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://www.amazon.com/dp/1933988428?tag=tocoornotoco-20&amp;amp;camp=213381&amp;amp;creative=390973&amp;amp;linkCode=as4&amp;amp;creativeASIN=1933988428&amp;amp;adid=0HCK5R1QJRR3M87M8TCC&amp;amp;"&gt;&lt;img title="CoverArt" style="border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; border-left: 0px; margin-right: 0px; border-bottom: 0px" height="180" alt="CoverArt" src="http://riathoughts.com/files/media/image/WindowsLiveWriter/ImSpeakingatMix09_8A78/CoverArt_3.jpg" width="180" align="right" border="0" /&gt;&lt;/a&gt; I’ll also be doing a book signing for &lt;a href="http://www.amazon.com/dp/1933988428?tag=tocoornotoco-20&amp;amp;camp=213381&amp;amp;creative=390973&amp;amp;linkCode=as4&amp;amp;creativeASIN=1933988428&amp;amp;adid=0HCK5R1QJRR3M87M8TCC&amp;amp;"&gt;Silverlight 2 in Action&lt;/a&gt;, time and location will be forthcoming. Don’t worry if you don’t have a copy yet, they will be available in the bookstore on site at Mix :).&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:left; margin:0px; padding:4px 0px 4px 0px;"&gt;&lt;a href="http://digg.com/submit?url=http%3a%2f%2friathoughts.com%2fblog%2fi-rsquo-m-speaking-at-mix09%2f&amp;amp;title=I%e2%80%99m+Speaking+at+Mix09!"&gt;&lt;img src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" alt="Digg This" title="Digg This" border="0" style="border: 0" /&gt;&lt;/a&gt;&lt;/div&gt;</description></item><item><title>CodeMash Wrapup</title><link>http://riathoughts.com/blog/codemash-wrapup/</link><pubDate>Thu, 22 Jan 2009 01:06:00 GMT</pubDate><guid isPermaLink="true">http://riathoughts.com/blog/codemash-wrapup/</guid><dc:creator>johnnystock</dc:creator><slash:comments>48</slash:comments><category domain="http://riathoughts.com/blog/">Blog</category><description>&lt;p&gt;I know this is late but hey, at least I’m getting it out there :).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codemash.org/"&gt;&lt;img title="CodeMash09Spoke" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="133" alt="CodeMash09Spoke" src="http://riathoughts.com/files/media/image/WindowsLiveWriter/CodeMashWrapup_8D67/CodeMash09Spoke_3.png" width="207" align="right" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.codemash.org/"&gt;CodeMash 2009&lt;/a&gt; was held Jan 7-9 in the frigid and snowy Sandusky Ohio. This was the most incredible experience I’ve had professionally in a very long time. The keynotes were incredible, presentations were great and the people… the people are what makes CodeMash something special. Every night there were great conversations going late into the night (morning) covering every technical topic you can think of.&lt;/p&gt;  &lt;h4&gt;CodeJam&lt;/h4&gt;  &lt;p&gt;I was one of a group of five people that hosted the CodeJam precompiler session. It went, well, ok. We had a few technical difficulties which made the day rough though. First, our Vista VM which had the full Silverlight development loaded on it, died on us that morning. Nothing we could do made it boot. Then, when people tried to download SP1 for VS2008, we didn’t have the bandwidth to do so. We did end up with several people up and running and they were willing to pair with others. Overall I do think it was a worthwhile experience and I definitely learned a&amp;#160; lot for next time :).&lt;/p&gt;  &lt;p&gt;The co-conspirators: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.codinggeekette.com/"&gt;Sarah Dutkiewicz&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://twitter.com/coreyhaines"&gt;Corey Haines&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://faithfulgeek.tumblr.com/"&gt;Joe Fiorini&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.extracheese.org/"&gt;Gary Bernhardt&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Networking and Communications in Silverlight&lt;/h4&gt;  &lt;p&gt;On the last day of the conference I presented on Networking and Communication in Silverlight. This was based on a talk I have done several times so I feel that my delivery was solid. In this talk I give an overview of what options there are to get data into your Silverlight application and also how to read various data formats. I didn’t do many of my demos but for this level of talk (intro to loading and consuming data) I feel that presenting a wider array of options and taking more questions is more useful to attendees. From the comments I got afterwards it would seem that I was correct.&lt;/p&gt;  &lt;p&gt;Links:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://riathoughts.com/files/uploads/MovieTickets.zip" target="_blank"&gt;Source Code&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://riathoughts.com/files/uploads/CodeMash_Communications.pdf" target="_blank"&gt;Slides&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Sessions&lt;/h4&gt;  &lt;p&gt;I also went to quite a few sessions and learned a lot. Here’s a quick list:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://silverlight.net/blogs/jesseliberty/"&gt;Jesse Liberty&lt;/a&gt; on Hyper-Video&lt;/strong&gt;     &lt;br /&gt;Jesse had some technical difficulties getting started (ended up using my laptop) but he did get his point across. I’ll probably be &lt;strike&gt;stealing&lt;/strike&gt; borrowing some of his concepts for future talks/posts.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Thrashing with &lt;a href="http://www.poppendieck.com/"&gt;Mary Poppendieck&lt;/a&gt;&lt;/strong&gt;     &lt;br /&gt;If you have ever worked in a shop where you are working on multiple projects concurrently, this was the session to attend. Her talk was most appropriate to enterprise developers but most of the concepts could be applied to nearly any dev shop.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;MEF with &lt;a href="http://geekswithblogs.net/drewby/Default.aspx"&gt;Drew Robbins&lt;/a&gt;&lt;/strong&gt;     &lt;br /&gt;Drew gave us an overview of what MEF is and how it can be used. Personally, this is something I’m going to be watching closely as it matures and can already see many uses for it. And of course there were plenty of jokes about things like the “MEF Lab” (say it out loud).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.jamesward.com/blog/"&gt;James Ward&lt;/a&gt; on Flex&lt;/strong&gt;     &lt;br /&gt;Embracing the spirit of CodeMash, I went over to learn about Flex. I’m sure you all know I’m a Silverlight developer and will probably never touch Flex but it was nice to learn the capabilities (and similarities to Silverlight) of the platform. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.oreillynet.com/pub/au/2063"&gt;Venkat Subramaniam’s&lt;/a&gt; keynote&lt;/strong&gt;     &lt;br /&gt;This was actually the only keynote I was able to attend the entire talk for various reasons. It was awesome. My most memorable quotes from it are “exercise is boring” and “fail-for-less strategy”.&lt;/p&gt;  &lt;h4&gt;Deep Fried Bytes&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://keithelder.net/blog/"&gt;Keith Elder&lt;/a&gt; and &lt;a href="http://cloudsocket.com/graffiti/"&gt;Chris Woodruff&lt;/a&gt; had a room staked out on Friday for the purpose of recording episodes of their &lt;a href="http://deepfriedbytes.com/"&gt;Deep Fried Bytes&lt;/a&gt; podcast. They were gracious enough to listen to me blab on about Silverlight for a while and we should see that coming out in the near future. I’ll link to it when it’s been published.&lt;/p&gt;  &lt;p&gt;Keith and Chris make recording a podcast a very natural process, as long as you remember to keep the mic planted in place. It was actually a lot of fun and I can’t wait to record another for whoever wants to hear me talk.&lt;/p&gt;  &lt;h4&gt;The People&lt;/h4&gt;  &lt;p&gt;Wow.&lt;/p&gt;  &lt;p&gt;This is why to go to CodeMash. The conversations held in the halls, at tables over dinner, in hotel rooms at night and wherever else people gathered were always informative and open. From dinner with Mark and Tom Poppendieck to reviewing &lt;a href="http://www.codeplex.com/"&gt;CodePlex&lt;/a&gt; for &lt;a href="http://blogs.msdn.com/saraford"&gt;Sara Ford&lt;/a&gt; to a great gathering of Heartland influencers with the Microsoft evangelism team, there was never a boring moment.&lt;/p&gt;  &lt;p&gt;Thank you all for a great conference.&lt;/p&gt;  &lt;h4&gt;Final Thoughts&lt;/h4&gt;  &lt;p&gt;I met so many great people and had so many great conversations that there is no way I can list them all here. Just know that if we spoke, I enjoyed it, if we didn’t, I feel like I missed a great opportunity since everyone at the conference had something to offer. &lt;/p&gt;  &lt;p&gt;I can’t wait for CodeMash 2.0.1.0&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:left; margin:0px; padding:4px 0px 4px 0px;"&gt;&lt;a href="http://digg.com/submit?url=http%3a%2f%2friathoughts.com%2fblog%2fcodemash-wrapup%2f&amp;amp;title=CodeMash+Wrapup"&gt;&lt;img src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" alt="Digg This" title="Digg This" border="0" style="border: 0" /&gt;&lt;/a&gt;&lt;/div&gt;</description></item></channel></rss>

